Question

Les objets qui dérivent de HashAlgorithm tels que MD5CryptoServiceProvider ont une méthode Dispose (), mais il est privé. Au contraire, il a une méthode claire () qui « libère toutes les ressources » utilisées par elle.

WTF?

Est-ce la façon de disposer correctement d'un HashAlgorithm alors?

var hasher = new MD5CryptoServiceProvider();

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

hasher.Clear();

Quelqu'un veux expliquer celui-ci pour moi? :)

Était-ce utile?

La solution

Recherche avec réflecteur, la méthode Clear de HashAlgorithm appelle simplement la méthode Dispose privée. La raison pour exposer une méthode avec le nom Clear était probablement juste que les concepteurs de la classe pensé que ce serait un nom plus approprié pour un algorithme de hachage. Vous voyez des styles similaires dans d'autres parties de la BCL, tels que Close pour System.IO.Stream. En outre, les meilleures pratiques est d'utiliser un bloc using, qui appellera automatiquement la méthode de Dispose privée quand il est fini.

Autres conseils

Alors que la méthode Dipose() est privée, si vous le jeter aux IDisposable vous pouvez y accéder. Comme d'autres l'ont dit, cependant, Clear() appellera pour vous.

Une meilleure approche, cependant, est de joindre la déclaration et l'affectation et de la variable dans un bloc en utilisant ():

byte[] hashCode;

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

Vous devez laisser le GC gérer pour vous. C'est est le travail.

Certaines ressources doivent être éliminés, comme les connexions DB et poignées de fichiers, alors mettez les dans un bloc de using (C #). Ce n'est pas un de ces cas, cependant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top