首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET:释放HashAlgorithm对象

.NET:释放HashAlgorithm对象
EN

Stack Overflow用户
提问于 2009-04-17 18:34:17
回答 3查看 3.6K关注 0票数 6

从HashAlgorithm派生的对象(如MD5CryptoServiceProvider )有一个Dispose()方法,但它是私有的。相反,它有一个Clear()方法,该方法“释放它使用的所有资源”。

见鬼?

那么,这是正确处理HashAlgorithm的方法吗?

代码语言:javascript
复制
var hasher = new MD5CryptoServiceProvider();

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

hasher.Clear();

有人能给我解释一下这个吗?:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-17 18:39:16

在使用反射器时,HashAlgorithmClear方法只是调用私有的Dispose方法。公开名为Clear的方法的原因可能只是因为类的设计者认为它更适合用于哈希算法。您可以在BCL的其他部分中看到类似的样式,例如用于System.IO.StreamClose。此外,这里的最佳实践是使用using块,它将在完成时自动调用私有Dispose方法。

票数 5
EN

Stack Overflow用户

发布于 2009-04-17 18:39:21

虽然Dipose()方法是私有的,但如果您将其强制转换为IDisposable,则可以访问它。不过,正如其他人所说,Clear()将为您调用它。

然而,一种更好的方法是将变量的声明和赋值包含在using()块中:

代码语言:javascript
复制
byte[] hashCode;

using(var hasher = new MD5CryptoServiceProvider())
{
    hashCode = hasher.ComputeHash(data);
}
票数 12
EN

Stack Overflow用户

发布于 2009-04-17 18:36:47

你应该让GC来帮你处理。这就是工作。

一些资源应该被释放,比如DB连接和文件句柄,所以把它们放在一个using块(C#)中。不过,这不是一个这样的案例。

票数 -5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/761660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档