C# 对象终结或垃圾回收的事件
对于远程处理框架,我需要保留一些关于我要返回的对象的元数据。 我无法控制对象本身(因此我无法使它们可识别),我也不知道它们的类型。我唯一的假设是它是引用类型 问题是生命周期,我什么时候释放元数据 我打算创建一个静态字典(ConcurrentDictionary),并在那里保存对对象和元数据的WeakReference。问题是,我如何知道何时删除元数据? 当对象本身完成时,是否有方法接收通知 我也不在乎亡灵术(物体复活)C# 对象终结或垃圾回收的事件,c#,.net,garbage-collection,C#,.net,Garbage Collection,对于远程处理框架,我需要保留一些关于我要返回的对象的元数据。 我无法控制对象本身(因此我无法使它们可识别),我也不知道它们的类型。我唯一的假设是它是引用类型 问题是生命周期,我什么时候释放元数据 我打算创建一个静态字典(ConcurrentDictionary),并在那里保存对对象和元数据的WeakReference。问题是,我如何知道何时删除元数据? 当对象本身完成时,是否有方法接收通知 我也不在乎亡灵术(物体复活) 谢谢收集特定对象时,您不会收到信号 您最好的选择确实是将meatadata与
谢谢收集特定对象时,您不会收到信号
您最好的选择确实是将meatadata与弱引用相结合,并定期扫描集合 采集特定对象时,不会收到信号
您最好的选择确实是将meatadata与弱引用相结合,并定期扫描集合 如果您使用的是.NET4或更高版本,则可以使用 这意味着您(可能)不需要担心自己释放元数据:一旦对象本身消失,元数据就会从表中消失
ConditionalWeakTable
类与其他类不同
集合对象在其密钥的对象生存期的管理中
存储在集合中。通常,当对象存储在
集合,它的生命周期将一直持续到被删除为止(并且没有
对对象的附加引用)或直到集合对象
它本身被摧毁了。但是,在ConditionalWeakTable
类中,向表中添加键/值对并不能确保
即使可以直接从服务器访问该密钥,该密钥也将保持不变
存储在表中的值(例如,如果表包含一个键,
A、 值为V1,第二个键为B,值为P2,包含
对a)的引用。相反,ConditionalWeakTable
如果没有其他项,则自动删除键/值项
表外部存在对键的引用
如果您使用的是.NET4或更高版本,则可能会使用 这意味着您(可能)不需要担心自己释放元数据:一旦对象本身消失,元数据就会从表中消失
ConditionalWeakTable
类与其他类不同
集合对象在其密钥的对象生存期的管理中
存储在集合中。通常,当对象存储在
集合,它的生命周期将一直持续到被删除为止(并且没有
对对象的附加引用)或直到集合对象
它本身被摧毁了。但是,在ConditionalWeakTable
类中,向表中添加键/值对并不能确保
即使可以直接从服务器访问该密钥,该密钥也将保持不变
存储在表中的值(例如,如果表包含一个键,
A、 值为V1,第二个键为B,值为P2,包含
对a)的引用。相反,ConditionalWeakTable
如果没有其他项,则自动删除键/值项
表外部存在对键的引用
虽然通常不建议您这样做,但您也可以编写自己的终结器,以便在对象被终结时不必知道。条件性可修改的建议听起来像是针对您试图实现的目标。虽然通常不建议,但您也可以编写自己的终结器,这样您就知道对象何时完成。有条件的脆弱建议听起来像是针对你想要实现的目标。可能的重复