我有这个代码: -
using (System.Security.Cryptography.SHA256 sha2 =
new System.Security.Cryptography.SHA256Managed())
{ .. }
我是否需要放置这行代码,就在我离开那个处置范围之前......或者已经处理掉“调用”。
sha2.Clear();
答案 0 :(得分:3)
由于AFAIK Clear()方法只调用Dispose,因此using块应该足以确保释放所使用的资源。
答案 1 :(得分:1)
恕我直言,如果调用Dispose()不足以处理对象,则代码中存在严重错误或设计中存在严重缺陷。所以不要担心在你自己的代码中采取任何额外的步骤!
答案 2 :(得分:1)
如果您使用Reflector查看,您会看到Clear
只调用Dispose
,因此您无需在示例中调用Clear
。
许多框架类为Close
提供了Clear
/ Dispose
/ Whatever覆盖,以使用法更加简单明了。
答案 3 :(得分:0)
一个通用的有用提示 - 不要忘记现在所有这些东西的来源都可用 - 它经常帮助我回答这类问题,而不必猜测或推断。
答案 4 :(得分:-2)
Dispose()已经足够了。
我不确定.NET是如何工作的。但是添加函数调用或“设置null”会降低Java中的性能。
CLR / Java VM将(并且必须)能够在下一个垃圾收集中从“根”清除所有解除引用的托管对象。
PS。 Dispose()会清理“非托管”资源,以提高GC性能,因为它不会等待Finallizer线程完成。