我怎么知道一个对象没有引用它,那时它应该被.NET垃圾收集器删除?
我正在做一些对象的克隆。之所以我克隆它是因为它是一个相同的对象,但它后来有不同的值。当我从某个类的属性中取消引用该对象时,我不知道该程序中任何位置引用某个克隆对象的位置。我的想法是绝对知道某个未引用的对象不应该被引用到任何地方。如果在其他地方引用它们,我需要引用它(修复它)。
我的想法是在系统中的任何地方引用一个对象的某个克隆来进行垃圾收集和释放空间。
无论如何我检查这个对象.NET?有没有图书馆或类似的东西。我觉得我认为我删除的对象在运行时仍然在我的程序中被引用,因为这个程序非常庞大。因为它被引用到其他地方,所以它不会被垃圾收集。
感谢您的帮助。
答案 0 :(得分:1)
您可以使用WeakReference
类来保存对象的引用,并检查其IsAlive
属性以了解该对象是否仍然存在或已被gargabe收集(已完成并取消分配)。 WeakReference
对您的案例的主要优点是此引用不会阻止GC处置对象目标。
您可以在检查之前显式调用垃圾收集器以降低可能性,因为没有其他对该对象的引用,GC还没有注意到。但是,您无法可靠地判断是否存在/不存在对象“在野外”的一定数量的引用。