C# 处理这个物体够了吗?还是我需要做更多?
我有以下代码:-C# 处理这个物体够了吗?还是我需要做更多?,c#,.net,dispose,sha2,C#,.net,Dispose,Sha2,我有以下代码:- using (System.Security.Cryptography.SHA256 sha2 = new System.Security.Cryptography.SHA256Managed()) { .. } 在我离开dispose作用域之前,是否需要放置这行代码。。或者dispose已经“调用”了 sha2.Clear(); 因为Clear()方法只调用Dispose,所以using块应该足以确保释放所使用的资源。IMHO如果调用Dispose()不足以释放
using (System.Security.Cryptography.SHA256 sha2 =
new System.Security.Cryptography.SHA256Managed())
{ .. }
在我离开dispose作用域之前,是否需要放置这行代码。。或者dispose已经“调用”了
sha2.Clear();
因为Clear()方法只调用Dispose,所以using块应该足以确保释放所使用的资源。IMHO如果调用Dispose()不足以释放对象,那么代码中可能存在严重错误或设计中存在严重缺陷。因此,不要担心在您自己的代码中执行任何附加步骤 还有一个通用的有用提示——别忘了,现在所有这些东西的来源都是可用的——它经常帮助我回答这类问题,而不必猜测或推断 这是一个很好的起点:Dispose()就足够了 我不确定.NET是如何工作的。但是添加函数调用或“set null”会降低Java中的性能 CLR/Java VM将(并且必须)能够在下一次垃圾收集中从“根”中清除所有取消引用的托管对象 附言。
Dispose()清理“非托管”资源,以提高GC性能,因为它不需要等待Finallizer线程完成。如果您使用Reflector查看一下,您将看到
Clear
只调用Dispose
,因此在您的示例中不需要调用Clear
许多框架类提供了一个
Close
/Clear
/任何Dispose
的掩护,使使用更加简单 您可以像使用.NET Reflector一样查看代码。考虑到system.security的源代码仍然是正在发布的源代码的一部分(我不确定)。不确定为什么会有这样的诅咒,甚至是缩写。与你的问题有关的是,这是一种可以通过查看来源来回答的问题。如果你是那种想了解事物的人,那可能会很有用。对不起,误读了你的意思