调用.net垃圾收集器会更有效吗?

Euc*_*lid 1 c# clr optimization performance garbage-collection

由于在CLR中调用垃圾收集器的开销,离开它是否更有效,或者当对象超出范围时强制进行垃圾收集?

And*_*are 8

不自行调用GC的一个主要原因是,由于GC是自我调整的,因此您从托管堆中收集的任何调用都将有效地破坏GC代表您的应用程序执行的任何自我调整.

GC将要做的主要事情之一是调整在托管堆的三代中的每一代上触发垃圾收集的阈值,以减少应用程序所需的集合数.

对于除极端情况外的所有情况,最好允许GC完成其工作,而不必担心手动调用它.只有当您确定了明确的需求时,才应手动调用集合.


Gra*_*ton 5

大多数情况下,手动调用垃圾收集器是不值得的.您会对底层垃圾收集器算法的效率感到惊讶.

除非您在金融应用程序(例如:衍生交易应用程序)中工作,否则您需要完全控制垃圾收集器被调用的时间.但是如果你要进入那条路线,也许你应该尝试其他语言,比如C++


Jos*_*osh 5

除了Andrew的评论之外,不必要地调用GC.Collect将导致其他高效的Gen-0集合被推入Gen-1和Gen-2桶中,这些桶的收集频率要低得多.具有讽刺意味的是,这意味着您的应用程序将受到长期内存使用量增加的影响,从而失去了减少内存使用量的初衷.

调用GC.Collect的少数情况之一是在使用COM或Win32时.例如,Office中的COM对象挂起的时间比预期的要长,这种情况并不少见,因为无法明确处理它们.因此,您可能希望COM包装器在特定时间进行GC,通常会在调用WaitForPendingFinalizers之后进行.