1

我有这个代码: -

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

我是否需要在离开该处置范围之前放置这行代码..还是已经处置“调用”了。

sha2.Clear();
4

5 回答 5

3

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

于 2008-11-30T11:11:14.443 回答
1

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

于 2008-11-30T11:28:59.383 回答
1

如果您使用 Reflector 看一下,您会看到它Clear只是调用,因此在您的示例中Dispose无需调用。Clear

许多框架类都提供了Close// ClearWhatever 覆盖,Dispose以使使用更加简单明了。

于 2008-11-30T12:46:42.220 回答
0

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

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

于 2008-11-30T11:33:09.733 回答
-2

Dispose() 已经足够好了。

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

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

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

于 2008-11-30T11:57:28.437 回答