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

use*_*967 2 c# garbage-collection c#-4.0

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

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

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

亲切的问候,大卫

Eri*_*ert 6

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

我实际上在这种情况下; 我们通过广泛的测试确定,我们一直在临时使用某些物体,(基本上是其他物体的"建造者"),并且经常重新分配它们所引起的收集压力的成本是可测量的和高的.

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

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

根据我的意思,没有办法"挂钩"垃圾收集器将内容自动放回池中.