Frage

Objekte, die von HashAlgorithm ableiten wie MD5CryptoServiceProvider haben eine Methode Dispose (), aber es ist privat. Stattdessen hat es eine Clear () Methode, die „Gibt alle Ressourcen“ verwendet, indem es.

WTF?

Ist das, wie man richtig ein HashAlgorithm entsorgen dann?

var hasher = new MD5CryptoServiceProvider();

byte[] hashCode = hasher.ComputeHash(data);

hasher.Clear();

Jemand will, dies zu mir erklären? :)

War es hilfreich?

Lösung

Suchen Sie mit Reflektor, ruft die Clear Methode des HashAlgorithm einfach die private Dispose Methode. Der Grund für ein Verfahren, mit dem Namen Clear auszusetzen war wahrscheinlich nur, dass die Designer der Klasse hielt es für ein passenderer Name für einen Hash-Algorithmus wäre. Sie sehen ähnlich Stile in anderen Teilen des BCL, wie Close für System.IO.Stream. Auch hier Best Practice ist ein using Block zu verwenden, die automatisch die private Dispose Methode aufrufen, wenn es fertig ist.

Andere Tipps

Während die Dipose() Methode privat ist, wenn Sie es zu gieße IDisposable Sie darauf zugreifen können. Wie andere gesagt haben, obwohl, Clear() wird es für Sie an.

Ein besserer Ansatz ist jedoch die Erklärung und und Zuweisung der Variablen in einem () verwendet Block einzuschließen:

byte[] hashCode;

using(var hasher = new MD5CryptoServiceProvider())
{
    hashCode = hasher.ComputeHash(data);
}

Sie sollten die GC lassen, dass für Sie. Das ist es Aufgabe.

sollten Einige Ressourcen entsorgt werden, wie DB-Verbindungen und Datei-Handles, so dass diese in einem using Block (C #) setzen. Dies ist nicht einer jener Fälle, though.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top