Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理这个物体够了吗?还是我需要做更多?_C#_.net_Dispose_Sha2 - Fatal编程技术网

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的源代码仍然是正在发布的源代码的一部分(我不确定)。不确定为什么会有这样的诅咒,甚至是缩写。与你的问题有关的是,这是一种可以通过查看来源来回答的问题。如果你是那种想了解事物的人,那可能会很有用。对不起,误读了你的意思