ホームページ > バックエンド開発 > C++ > チェックサムとチャンク比較により、.NET でのファイル比較を高速化できますか?

チェックサムとチャンク比較により、.NET でのファイル比較を高速化できますか?

Barbara Streisand
リリース: 2025-01-10 16:33:44
オリジナル
178 人が閲覧しました

Can Checksumming and Chunk Comparison Speed Up File Comparison in .NET?

.NET の効率的なファイル比較テクノロジ

ファイルをバイトごとに比較するのは一般的な方法ですが、非効率的です。この記事では、ファイルを比較するより高速な方法を検討し、チェックサムを生成するための .NET のライブラリを紹介します。

チェックサム比較により速度は向上しますか?

はい、チェックサム比較に CRC などのアルゴリズムを使用すると、バイトごとの方法よりも高速になります。チェックサムはファイルごとに一意の署名を生成するため、ファイル全体ではなく署名を比較できます。

.NET ファイルチェックサム生成ライブラリ

複数の .NET ライブラリは、ファイル チェックサム生成機能を提供します:

  • System.Security.Cryptography.MD5: ファイルの MD5 チェックサムを生成します。
  • System.Security.Cryptography.SHA1: ファイルの SHA1 チェックサムを計算します。
  • System.Security.Cryptography.SHA256: ファイルの SHA256 チェックサムを計算します。
  • System.Security.Cryptography.SHA512: ファイルの SHA512 チェックサムを生成します。

最適化された比較方法

ハッシュは高速な方法ですが、大きなバイトの塊を読み取り、数値として比較する方法を使用すると、ファイル比較をさらに最適化できます。

<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++)
        {
            int read1 = fs1.Read(one, 0, BYTES_TO_READ);
            int read2 = fs2.Read(two, 0, BYTES_TO_READ);

            if (read1 != read2 || !one.SequenceEqual(two))
                return false;
        }
    }

    return true;
}</code>
ログイン後にコピー

パフォーマンステスト結果

パフォーマンス テストでは、大きなファイル (100 MB のビデオ ファイルなど) の場合、ファイル ブロックを数値として比較する方が、バイトごとの比較やハッシュよりも優れたパフォーマンスを発揮することが示されています。

    ブロック比較: 1063ms
  • バイトごとの比較: 3031ms
  • ハッシュ: 865ms
ファイルが小さい場合、最適化された性質により、通常、ハッシュの方が高速になります。ただし、ファイルが大きい場合、ファイル全体の読み取りと処理のオーバーヘッドが大きくなる可能性があるため、ブロック比較方法の方が高速です。

以上がチェックサムとチャンク比較により、.NET でのファイル比較を高速化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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