Pregunta

Los objetos que se derivan de HashAlgorithm como MD5CryptoServiceProvider tienen un método Dispose (), pero es privado. En cambio, tiene un método Clear () que "Libera todos los recursos utilizados" por ella.

WTF?

¿Es así como para disponer correctamente de un HashAlgorithm entonces?

var hasher = new MD5CryptoServiceProvider();

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

hasher.Clear();

quiero alguien explicar esto a mí? :)

¿Fue útil?

Solución

Mirando con reflector, el método de Clear HashAlgorithm simplemente llama al método Dispose privado. El motivo de la exposición de un método con el nombre de Clear era probablemente sólo que los diseñadores de la clase pensaron que sería un nombre más adecuado para un algoritmo de hash. Ves estilos similares en otras partes del BCL, como Close para System.IO.Stream. Además, la mejor práctica es utilizar un bloque using, que se llamará automáticamente al método Dispose privada cuando esté terminado.

Otros consejos

Mientras que el método Dipose() es privado, si lo lanzas a IDisposable se puede tener acceso a él. Como otros han dicho, sin embargo, Clear() llamará por usted.

Un mejor enfoque, sin embargo, es encerrar la declaración y y asignación de la variable en un bloque utilizando ():

byte[] hashCode;

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

Se debe dejar que el GC manejar eso para usted. Ese es su trabajo.

Algunos recursos se deben tirar, al igual que las conexiones de base de datos y manipulación de archivos, por lo que ponen las de un bloque using (C #). Este no es uno de esos casos, sin embargo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top