Der Vergleich zweier Dateien in .NET kann sehr zeitaufwändig sein, insbesondere bei großen Dateien. Die herkömmliche Methode, Binärdateien Byte für Byte zu lesen und zu vergleichen, ist ineffizient und langsam.
Alternative Methoden
Um die Leistung zu verbessern, ziehen Sie die folgenden Alternativen in Betracht:
Eine überraschend schnelle Methode besteht darin, die beiden Dateien in einem einzelnen Byte-Array zu verketten und die resultierenden Werte zu vergleichen.
<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>
Eine andere Methode besteht darin, mithilfe eines Prüfsummenalgorithmus wie CRC oder MD5 einen Fingerabdruck jeder Datei zu erstellen. Der Vergleich dieser Fingerabdrücke ist viel schneller als der Vergleich ganzer Dateien.
<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>
Leistungsvergleich
Im Test großer Videodateien war die Leistung der Dateizusammenführungsmethode etwa dreimal so hoch wie die der Byte-für-Byte-Vergleichsmethode, während der Hash-Vergleich mit durchschnittlich etwa 865 Millisekunden schneller war.
Die beste Methode hängt von der Größe und Art der Dateien ab, die Sie vergleichen möchten. Diese Alternativen bieten jedoch erhebliche Leistungsverbesserungen gegenüber herkömmlichen Byte-für-Byte-Vergleichsmethoden.
Das obige ist der detaillierte Inhalt vonWie kann ich Dateien in .NET effizienter als Byte für Byte vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!