gpt4 book ai didi

.net - 跑赢垃圾收集器?

转载 作者:行者123 更新时间:2023-12-01 07:32:25 25 4
gpt4 key购买 nike

好的,这可能是一个菜鸟问题,但在这里。

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

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

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

任何帮助真的很感激

最佳答案

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

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

如果删除对大型复杂对象的引用,它不会一次收集一个对象。它看到没有一个对象再有任何事件引用,它会立即收集整组对象。

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

如果垃圾收集器仍然发现自己有很多工作要做,它就会去做,而您将不得不等待它。它在工作时卡住您的线程,并且在垃圾收集器完成之前它们不会运行。

关于.net - 跑赢垃圾收集器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1257391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com