破坏垃圾收集器?

Car*_*rlo 3 .net garbage-collection

好吧,这可能是一个noob问题但是这里有.

是否有可能"超越"垃圾收集器?

我问的原因是因为我有一个递归方法,在我的应用程序中的一些事件中运行了几次(通过几个我的意思是每秒大约60次,并且事件持续无限的时间,甚至几分钟).问题是在递归方法的每个循环中,我创建了一个相当复杂的对象(TreeViewItem包含我们需要的一些mod用于项目和另一个复杂的对象,它作为TreeViewItem的DataContext),所以我担心的是这些TreeViewItems停留在递归方法运行时在堆中,所以当垃圾收集器启动时,它不会清除它们; 并且可能,下一次递归方法启动时,它会堆叠更多的TreeViewItem,垃圾收集器永远不会赶上.

问题是我们有内存泄漏,我们正在寻找罪魁祸首.

任何真正有用的帮助

Guf*_*ffa 7

不,你不能通过重载它来使垃圾收集器泄漏.

垃圾收集器的工作方式实际上使它能够很好地处理像你这样的情况.

如果删除对大型对象的引用,则不会一次收集一个对象.它看到没有任何对象具有任何活动引用,它将立即收集整组对象.

大多数对象都是短暂的,因此垃圾收集器的构建是为了有效地处理它.例如,如果您已填充第一代堆,并且要收集90%的对象,则垃圾收集器不会删除90%.相反,它将10%移动到下一代并简单地擦除第一代.

如果垃圾收集器仍然发现自己需要做很多工作,它就会这样做,你将不得不等待它.它会在线程工作时冻结它们,并且它们在垃圾收集器完成之前就不会运行.