这是覆盖Finalize的有效方案吗?

时间:2016-02-21 14:04:25

标签: .net finalize

我的情况是垃圾收集是我的应用程序的主要瓶颈。会发生什么事情是某些清理成本高昂的对象 - 它们包含其他对象的数组。所以我认为我尝试的是回收物品。通常情况下,我不知道他们什么时候可以自由回收,所以我认为我会覆盖Finalize,此时我会将它们放在缓存中,以便下次需要时使用创造一个。问题解决了。或者是吗?

1 个答案:

答案 0 :(得分:1)

这是一个研究得很好的问题。 Google for" .net缓存终结器"。或者替换"缓存"使用"对象池"。基本上,这很糟糕,因为GC不必为您维护高效的缓存行为。它可能会过度收集或收集不足。澄清一下:这个方案可以起作用,但它更像是最后的解决方案。

此外,您可能希望以某种方式证明这些对象是导致性能问题的真正原因。 .NET没有GC分析器,可以精确定位各个对象的性能贡献。也许你可以用肮脏的方式迅速将这个对象池一起破解并测量差异。