【发布时间】:2016-02-21 14:04:24
【问题描述】:
我有一种情况,垃圾收集是我的应用程序的主要瓶颈。发生的情况是某些对象的清理成本很高——它们包含其他对象的数组。所以我想我会尝试回收这些物品。通常情况下,我不知道它们何时可以免费回收,所以我想我会覆盖 Finalize,此时我会将它们放入缓存中,以备下次需要创建时使用。问题解决了。还是这样?
【问题讨论】:
-
不,恐怕不会 - 最好将它们一直保存在缓存中并使用标志来指示它们是否空闲(或将它们移动到 used 哈希集中或其他) - 请参阅here
-
这是一个经过充分研究的问题。谷歌搜索“.net 缓存终结器”。或者将“缓存”替换为“对象池”。基本上,这很糟糕,因为 GC 不必为您维护有效的缓存行为。它可能会过度或收集不足。澄清一下:这个方案可以工作,但它更像是最后的解决方案。
-
感谢您的回复。看起来我能做的最好的事情就是只缓存我知道不再需要的实例,然后让其余的实例被垃圾收集。