.NET effiziente Dateivergleichstechnologie
Der Byte-für-Byte-Vergleich von Dateien ist eine gängige Methode, aber sie ist ineffizient. In diesem Artikel werden schnellere Methoden zum Vergleichen von Dateien untersucht und Bibliotheken in .NET zum Generieren von Prüfsummen vorgestellt.
Kann der Prüfsummenvergleich die Geschwindigkeit verbessern?
Ja, die Verwendung von Algorithmen wie CRC für den Prüfsummenvergleich ist schneller als die byteweise Methode. Prüfsummen generieren eine eindeutige Signatur für jede Datei, sodass Signaturen statt ganzer Dateien verglichen werden können.
Bibliothek zur Generierung von Prüfsummen für .NET-Dateien
Mehrere .NET-Bibliotheken bieten Funktionen zur Generierung von Dateiprüfsummen:
System.Security.Cryptography.MD5
: MD5-Prüfsumme der Datei generieren. System.Security.Cryptography.SHA1
: Berechnen Sie die SHA1-Prüfsumme der Datei. System.Security.Cryptography.SHA256
: Berechnen Sie die SHA256-Prüfsumme der Datei. System.Security.Cryptography.SHA512
: SHA512-Prüfsumme der Datei generieren. Optimierte Vergleichsmethode
Während Hashing eine schnelle Methode ist, können Sie Dateivergleiche mit einer Methode weiter optimieren, die große Byteblöcke liest und sie als Zahlen vergleicht:
<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>
Ergebnisse des Leistungstests
Leistungstests zeigen, dass bei großen Dateien (z. B. einer 100-MB-Videodatei) der Vergleich von Dateiblöcken als Zahlen besser ist als Byte-für-Byte-Vergleiche und Hashes:
Bei kleineren Dateien ist das Hashing aufgrund seiner optimierten Natur normalerweise schneller. Bei großen Dateien kann der Aufwand für das Lesen und Verarbeiten der gesamten Datei jedoch erheblich sein und die Blockvergleichsmethode ist schneller.
Das obige ist der detaillierte Inhalt vonKönnen Prüfsummen und Chunk-Vergleich den Dateivergleich in .NET beschleunigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!