繁体   English   中英

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

[英]c# find unused objects of specific class before garbage collection

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

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

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

亲切的问候,大卫

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

其实在那种情况下, 我们已经通过广泛的测试确定,某些情况下我们一直在临时使用所有对象(本质上是其他对象的“构建者”),并且由于频繁地重新分配它们而导致的收集压力成本是可衡量的且很高。

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

如果用户忘记了将对象放回池中,或者由于在“返回池中”调用之前引发了异常而无法这样做,那么谁在乎呢? 在这种情况下,我们所做的可能只是稍微优化了未来的分配。 代价是,完成操作后,您需要记住将对象放回池中。

没有办法“钩住”垃圾收集器,以将我所知道的东西自动放回池中。

您不能直接控制垃圾回收,但可以创建一个负责创建,保存引用和处理这些对象的管理器类。 只要manager类在作用域内,就不会对其对象进行垃圾回收。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM