【问题标题】:Is disposing this object, enough? or do i need to do more?处理这个对象就够了吗?还是我需要做更多?
【发布时间】:2008-11-30 20:59:15
【问题描述】:

我有这个代码:-

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

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

sha2.Clear();

【问题讨论】:

    标签: c# .net dispose sha2


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        如果您使用 Reflector 进行查看,您会发现 Clear 只调用了 Dispose,因此在您的示例中无需调用 Clear

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

          • 好吧,您可以像使用 .NET Reflector 一样查看代码。鉴于 system.security 的源代码尚未发布(我不确定)。
          • 不知道为什么咒骂是有序的,甚至是缩写的。它与您的问题有关的是,这是可以通过查看源代码来回答的问题。如果您是那种想了解事物的人,那可能会很有用。很抱歉误读了您
          【解决方案5】:

          Dispose() 已经足够好了。

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-08-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-20
            • 2020-10-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多