c#在垃圾回收之前查找特定类的未使用对象

时间:2011-03-20 05:28:13

标签: c# c#-4.0 garbage-collection

您好,非常感谢您的帮助!

在垃圾回收之前,有没有人有一个好主意找到特定类的未引用对象? (最好尽快)

就我而言,我需要创建一些特定类的小对象,仅供临时使用。问题是我不知道何时不再需要该对象。我想收集该类的对象,这些对象在垃圾收集之前不再被引用(尽快),以便我可以回收它们而不需要创建它们。我认为这会使代码更快。

亲切的问候, 大卫

2 个答案:

答案 0 :(得分:6)

首先,在您执行此操作之前,您应该进行大量分析,以确定您确实确实存在由收集压力引起的性能问题。垃圾收集器经过高度调整,大部分时间都运行良好;出于性能原因需要池化对象的情况很少见。

我实际上 am 在那个场景中;我们通过广泛的测试确定,我们一直在临时使用某些物体,(基本上是其他物体的“建造者”),并且经常重新分配它们所引起的收集压力的成本是可测量的和高的。

我们所做的是有一个池类,它维护一组“空白”对象。当您需要一个新对象时,池会检查数组并返回数组中的对象(如果有的话),使数组条目为空。如果我们没有,那么它会创建一个新对象。当临时用户完成对象后,它会将其传递回池中,该池将其“空白”并将其粘贴回阵列中。 (必要时增加阵列。)

如果用户忘记将对象放回池中,或者因为在“回到池中”调用之前抛出异常而无法将对象放回池中,谁在乎呢?在这种情况下我们所做的一切可能是未来分配的略微去优化。成本是你需要记住在完成后将对象放回池中。

我知道没有办法“挂钩”垃圾收集器将内容自动放回池中。

答案 1 :(得分:0)

您不能直接控制垃圾收集,但您可以创建一个管理器类,负责创建,保存引用和处理这些对象。只要管理器类在范围内,其对象就不会被垃圾收集。