.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 のビデオ ファイルなど) の場合、ファイル ブロックを数値として比較する方が、バイトごとの比較やハッシュよりも優れたパフォーマンスを発揮することが示されています。
以上がチェックサムとチャンク比較により、.NET でのファイル比較を高速化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。