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