在.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中文网其他相关文章!