【发布时间】:2011-12-28 10:38:28
【问题描述】:
假设我有一个目标强引用的WeakReference。我想在目标对象本身被 GC 收集时得到通知。有可能吗?
编辑:向终结器/析构函数添加代码不是这里的选项。我需要一些不依赖于类代码的东西。
【问题讨论】:
-
我不相信有任何事件表明正在收集地址。您可能尝试的最接近的事情是在被引用的类型上创建一个终结器,尽管它们在收集发生之前的未指定时间之前运行。我期待有更聪明的人给出答案。
-
如果垃圾收集器销毁对象,则调用对象的析构函数。例如,您可以在析构函数调用中做出反应并发送一个自制事件。
-
听起来像是复活的秘诀。为什么需要这个?
-
抱歉,我需要一些更透明且不依赖于类代码的东西。也许没有黑客是不可能的。我需要它来跟踪自定义序列化框架中对象的分离实例:收集对象时,我想清理
GuidWeakReference的静态映射。如果没有这个,我可以通过在延迟时间手动测试弱引用来检查对象是否被收集。对象实现了一个接口,因此框架更加灵活,因此添加终结器不是一种选择。
标签: c# .net garbage-collection weak-references strong-references