对象终结或垃圾回收的事件
本文关键字:事件 对象 | 更新日期: 2023-09-27 18:28:35
对于远程处理框架,我需要保留一些关于我返回的对象的元数据。我不能控制对象本身(所以我不能使它们IDisposable),我也不知道它们的类型。我唯一的假设是它是一个引用类型。
问题是生命周期,我什么时候才能释放元数据。
我打算创建一个静态字典(ConcurrentDictionary),并在那里保存一个对象和元数据的WeakReference。问题是,我如何知道何时删除元数据?有没有一种方法可以在对象本身完成时接收通知?
我也不在乎死灵术(物体复活)
感谢
如果您使用的是.NET4或更高版本,则可能使用ConditionalWeakTable<K,V>
。
这意味着您(可能)不需要担心自己释放元数据:一旦对象本身消失,元数据就会从表中消失。
ConditionalWeakTable<TKey, TValue>
类与其他类不同集合对象在其密钥的对象生存期管理中存储在集合中。通常,当对象存储在集合,其生存期将持续到删除为止(并且没有对对象的附加引用)或直到集合对象它本身就被摧毁了。但是,在ConditionalWeakTable<TKey, TValue>
类中,向表中添加键/值对并不能确保即使可以直接从存储在表中的值(例如如果表包含一个键,A、 值为V1的第二个键B,值为P2,包含参考a)。相反,ConditionalWeakTable<TKey, TValue>
自动删除键/值条目表外存在对键的引用。
收集特定对象时不会得到信号。
事实上,你最好的选择是将meaadata与弱参考相结合,并定期扫描集合。
虽然通常不建议,但您也可以编写自己的终结器,以便在对象完成时确定。条件弱点表的建议听起来像是针对你想要实现的目标。