C#中的垃圾收集器问题

时间:2009-01-29 16:36:24

标签: c# garbage-collection

在C#代码中,我有三个对象 A B C A B 均包含对 C 的引用。当 A 被销毁时,我希望删除 B C 的引用,以便 C 可以被垃圾收集器摧毁。

有没有办法在不从 B 手动删除它的情况下执行此操作? ( C 中的析构函数在从 B C 的引用被删除之前未被调用,因此在此处无效。)

3 个答案:

答案 0 :(得分:10)

它闻起来像是WeakReference

的工作
  

弱引用允许垃圾   收集器收集对象时   还是允许申请   访问该对象。如果你需要的话   对象,你仍然可以获得强大的   引用它并防止它   被收集。

听起来你应该通过WeakReference从B到C引用,而不是直接引用。

答案 1 :(得分:7)

首先,定义“删除”。然后考虑使用WeakReference类。

答案 2 :(得分:5)

解决方案1 ​​

B是否从您应用程序中的任何其他位置引用?

如果B只能通过A访问,那么当A被“删除”时,B和C将被“删除”。

解决方案2

当A被“移除”时,您应该向B发送信号。如果A知道B,则可以从A发信号B.我会使用IDisposable模式进行此

解决方案3

您可以使用B中的WeakReference来转到C,而不是直接从B引用C.