在.NET中比較兩個檔案可能非常耗時,尤其對於大型檔案而言。傳統的逐字節讀取二進位檔案並進行比較的方法效率低且速度慢。
替代方法
為了提升效能,請考慮以下替代方法:
一個出奇快的方法是將兩個檔案連接到單一位元組數組中,然後比較結果值。
<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>
另一種方法是使用校驗和演算法(例如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中文網其他相關文章!