编辑:我将其重新表述为一个问题并将答案移到答案部分......
在一个相对复杂的多线程.NET
应用程序中,我经历了OutOfMemoryException
,即使在我认为没有理由的情况下也是如此。
情况:
~MyFinalizer(){...}
)。症状:
OutOfMemoryException
问题:
答案 0 :(得分:2)
经过深入调查后,我找到了原因。由于花了一些时间,我想让遇到同样问题的其他人轻松一点。
原因:
MyFinalizer
被调用)它只会阻塞内存。在提到的应用程序的情况下,运行终结器的GC线程没有机会按需要尽快完成工作,因此堆耗尽。解决方案:
不要将终结器用于这样的"动态"对象(高容量,短寿命),以其他方式解决完成代码......
非常有用的来源:
答案 1 :(得分:0)
尝试使用分析器,例如:
对于LOH强制使用GC:
GC.Collect();
GC.WaitForPendingFinalizers();