【问题标题】:Usage of GC.Collect Method in c# [duplicate]c#中GC.Collect方法的使用[重复]
【发布时间】:2011-09-28 05:01:51
【问题描述】:

可能重复:
When is it acceptable to call GC.Collect?

是否有必要使用GC.Collect Method,这是一个好习惯吗?
如果,我应该什么时候使用这种方法?
如果,为什么?

编辑:根据MSDN是什么意思:用这个方法尝试回收所有无法访问的内存。

【问题讨论】:

标签: c# memory-management garbage-collection


【解决方案1】:

作为一般规则...不要使用它。

GC.Collect 强制垃圾收集器进行收集,这意味着暂停程序的所有线程,以便垃圾收集器可以验证哪些对象不再被引用并声明未使用的内存。

通常 GC 会自动决定何时收集内存,考虑您的程序何时空闲或分配的内存(虚拟内存)是否变低,因此为了分配更多内存,它需要释放一些内存。以我的经验,.NET GC(就像在 Microsoft 中一样)非常智能,并且做得很好。其他 GC(如单声道)我没有使用它们的经验,但仍然可能比开发人员决定何时执行收集做得更好。

当然,这对性能有很好的影响,并且与许多其他情况一样,它比您更清楚执行收集的最佳时间(在 99% 的情况下这是正确的)。所以不,这不是一个好的做法,您应该只有在您有充分理由这样做时才应该这样做......深入了解它的作用以及它可能产生的后果。

【讨论】:

    【解决方案2】:

    通常没有必要使用它,通常也不是一个好主意。

    有时您需要使用它,但通常您会在非最佳时间强制收集,这会影响性能。

    关于此事herehere有很好的讨论。

    【讨论】:

      【解决方案3】:

      一般不推荐;通常不被认为是好的做法。

      一般来说,GC 比你更清楚什么需要清理,什么时候需要清理。最佳实践是让 GC 不受阻碍地独自开展其业务除非您有具体证据证明 GC 的策略正在导致可以通过强制其采取不同行为来解决的问题。

      【讨论】:

        【解决方案4】:

        我在这里解释了一些相关的事情:

        WPF memory leak

        【讨论】:

        • 为什么?!!那是我的答案。从我自己的答案中复制和粘贴更好吗??
        • 最好(必需)至少给出一个摘要。否则 Q 下的评论就足够了。
        猜你喜欢
        • 2019-12-18
        • 2018-01-15
        • 2011-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-25
        • 2017-12-16
        • 2020-12-05
        相关资源
        最近更新 更多