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