ホームページ > バックエンド開発 > C++ > .NET でファイルをバイトごとより効率的に比較するにはどうすればよいですか?

.NET でファイルをバイトごとより効率的に比較するにはどうすればよいですか?

DDD
リリース: 2025-01-10 16:45:41
オリジナル
497 人が閲覧しました

How Can I Compare Files in .NET More Efficiently Than Byte-by-Byte?

.NET の効率的なファイル比較方法

.NET で 2 つのファイルを比較すると、特に大きなファイルの場合、非常に時間がかかることがあります。バイナリ ファイルをバイトごとに読み取って比較する従来の方法は、非効率的で時間がかかります。

代替方法

パフォーマンスを向上させるには、次の代替案を検討してください:

ファイル結合方法

驚くほど高速な方法は、2 つのファイルを 1 バイトの配列に連結し、結果の値を比較することです。

<code class="language-csharp">const int BYTES_TO_READ = sizeof(Int64);

static bool FilesAreEqual(FileInfo first, FileInfo second)
{
    if (first.Length != second.Length)
        return false;

    if (string.Equals(first.FullName, second.FullName, StringComparison.OrdinalIgnoreCase))
        return true;

    int iterations = (int)Math.Ceiling((double)first.Length / BYTES_TO_READ);

    using (FileStream fs1 = first.OpenRead())
    using (FileStream fs2 = second.OpenRead())
    {
        byte[] one = new byte[BYTES_TO_READ];
        byte[] two = new byte[BYTES_TO_READ];

        for (int i = 0; i < iterations; i++)
        {
            fs1.Read(one, 0, BYTES_TO_READ);
            fs2.Read(two, 0, BYTES_TO_READ);
            if (!one.SequenceEqual(two))
                return false;
        }
    }
    return true;
}</code>
ログイン後にコピー

チェックサムの比較

もう 1 つの方法は、CRC や MD5 などのチェックサム アルゴリズムを使用して各ファイルのフィンガープリントを生成することです。これらのフィンガープリントの比較は、ファイル全体を比較するよりもはるかに高速です。

<code class="language-csharp">static bool FilesAreEqual_Hash(FileInfo first, FileInfo second)
{
    byte[] firstHash = MD5.Create().ComputeHash(first.OpenRead());
    byte[] secondHash = MD5.Create().ComputeHash(second.OpenRead());

    for (int i = 0; i < firstHash.Length; i++)
    {
        if (firstHash[i] != secondHash[i])
            return false;
    }
    return true;
}</code>
ログイン後にコピー

パフォーマンスの比較

大きなビデオ ファイルのテストでは、ファイル結合方式のパフォーマンスはバイト単位の比較方式の約 3 倍でしたが、ハッシュ比較の方が高速で、平均約 865 ミリ秒でした。

最適な方法は、比較するファイルのサイズと性質によって異なります。ただし、これらの代替方法では、従来のバイトごとの比較方法に比べてパフォーマンスが大幅に向上します。

以上が.NET でファイルをバイトごとより効率的に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート