当前位置:  开发笔记 > 编程语言 > 正文

C#中的垃圾收集器问题

如何解决《C#中的垃圾收集器问题》经验,为你挑选了3个好方法。

在C#代码,我有三个对象,Ç.AB各自持有对C的引用.当A被销毁时,我希望删除从BC的引用,以便C可以被垃圾收集器销毁.

有没有办法这样做而不从B手动删除它?(在删除从BC的引用之前,不会调用C中的析构函数,因此在此处无效.)



1> Vojislav Sto..:

它闻起来像WeakReference的工作:

弱引用允许垃圾收集器收集对象,同时仍允许应用程序访问该对象.如果您需要该对象,您仍然可以获得它的强引用并防止它被收集.

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



2> Anton Gogole..:

首先,定义"删除".然后考虑使用WeakReference类.



3> GvS..:

解决方案1

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

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

解决方案2

当A被"移除"时,您应该向B发送信号.如果B已知A,则可以从A发信号B.我会使用IDisposable模式

解决方案3

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

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有