处理这个对象,够了吗?还是我需要做更多?

时间:2008-11-30 11:07:42

标签: c# .net dispose sha2

我有这个代码: -

using (System.Security.Cryptography.SHA256 sha2 = 
    new System.Security.Cryptography.SHA256Managed())
{ .. }

我是否需要放置这行代码,就在我离开那个处置范围之前......或者已经处理掉“调用”。

sha2.Clear();

5 个答案:

答案 0 :(得分:3)

由于AFAIK Clear()方法只调用Dispose,因此using块应该足以确保释放所使用的资源。

答案 1 :(得分:1)

恕我直言,如果调用Dispose()不足以处理对象,则代码中存在严重错误或设计中存在严重缺陷。所以不要担心在你自己的代码中采取任何额外的步骤!

答案 2 :(得分:1)

如果您使用Reflector查看,您会看到Clear只调用Dispose,因此您无需在示例中调用Clear

许多框架类为Close提供了Clear / Dispose / Whatever覆盖,以使用法更加简单明了。

答案 3 :(得分:0)

一个通用的有用提示 - 不要忘记现在所有这些东西的来源都可用 - 它经常帮助我回答这类问题,而不必猜测或推断。

这是一个很好的起点:http://www.codeplex.com/NetMassDownloader

答案 4 :(得分:-2)

Dispose()已经足够了。

我不确定.NET是如何工作的。但是添加函数调用或“设置null”会降低Java中的性能。

CLR / Java VM将(并且必须)能够在下一个垃圾收集中从“根”清除所有解除引用的托管对象。

PS。 Dispose()会清理“非托管”资源,以提高GC性能,因为它不会等待Finallizer线程完成。