Die erste Frage ist, wofür Sie diese Prüfsumme benötigen. Wenn Sie die kryptografischen Eigenschaften nicht benötigen, dann ist ein nicht kryptografischer Hash oder ein Hash, der weniger kryptographisch sicher ist (MD5 ist "gebrochen", verhindert nicht, dass es ein guter Hash ist und für einige Verwendungen immer noch stark genug) wahrscheinlich leistungsfähiger. Sie könnten Ihren eigenen Hash erstellen, indem Sie eine Teilmenge der Daten lesen (ich würde empfehlen, diese Teilmenge in 4096-Byte-Chunks der zugrunde liegenden Datei zu arbeiten, da dies der von SHA1Managed verwendeten Puffergröße entspricht und ein schnelleres Chunk-Lesen ermöglicht Sie würden, wenn Sie alle X Bytes für einen Wert von X sagen würden).
Bearbeiten: Ein upvote erinnert mich an diese Antwort, hat mich auch daran erinnert, dass ich seit SpookilySharp schreibt, die leistungsstarke 32-, 64- und 128-Bit-Hashes, die nicht kryptografisch, aber gut für die Bereitstellung von Prüfsummen gegen Fehler bietet , Speicher usw. (Dies wiederum hat mich daran erinnert, dass ich es aktualisieren sollte, um .NET Core zu unterstützen).
Natürlich, wenn Sie möchten, dass der SHA-1 der Datei mit etwas anderem interagiert, stecken Sie fest.
Ich würde mit verschiedenen Puffergrößen experimentieren, da eine Erhöhung der Größe des Filestream-Puffers die Geschwindigkeit auf Kosten von zusätzlichem Speicher erhöhen kann. Ich würde ein ganzzahliges Vielfaches von 4096 empfehlen (4096 ist übrigens die Standardeinstellung), da SHA1Managed jeweils 4096 Stücke gleichzeitig anfordert, und auf diese Weise gibt es keinen Fall, in dem FileStream weniger zurückgibt als gewünscht (erlaubt aber manchmal) suboptimal) oder erstellt mehr als eine Kopie gleichzeitig.
+1 nur für den Versuch, die Leistung des schwersten Bit zu verbessern, und nicht darauf, dass formatiert ist in relativ ineffizienter Weise gebaut :) –
:) sollte das wahrscheinlich zu einem stringbuilder ändern? –
Ah, jetzt redest du dich selbst aus dieser +1! Was jedoch lohnend sein kann, wenn Sie solche Hex-Strings oft genug erzeugen, ist eine Methode, die dies tut (ein guter Fall für eine Erweiterungsmethode). Da es dann möglicherweise irgendwo verwendet wird, wo die Leistung einen größeren Unterschied macht, wäre es sinnvoller, den StringBuilder (mit der entsprechenden Kapazität erstellt) oder Char-Array-Ansätze mit fester Größe zu verschieben. –