有没有办法返回所有不相关的对象?

时间:2011-02-21 02:31:52

标签: c# garbage-collection

我有这个“Linked Web”(?)数据结构 即。每个对象都有一堆对其他对象的引用。

所以我编写了一个方法,该方法应该通过删除对它的所有引用来“删除”传递的对象。

我需要对它进行测试,并确保在我运行该方法后,我想删除的特定对象没有被其他任何东西引用

我怎么能这样做?

一个想法是强制垃圾收集,然后运行我的删除对象方法,然后强制另一个GC,看看它是否找到了一个对象。

如果它找到了一个删除对象,那么我会假设我的方法有效 但如果它没有找到任何东西可以收集,那么我会认为某些东西正在引用它并且必须堵塞那个泄漏

这可能吗?怎么样?

谢谢, 莱恩

2 个答案:

答案 0 :(得分:4)

您可以通过WeakReference跟踪每个对象,并在垃圾回收后检查IsAlive属性。

答案 1 :(得分:1)

这对我来说是一种过于复杂的方式来测试你的逻辑是否正确。我将以下列方式构建几个单元测试。

  1. 将对象添加到网络中。在测试中保留对象的引用
  2. 调用从Web取消引用的逻辑。
  3. 迭代(或遍历)您的网络并使用ObjectReferenceEquals查看您正在寻找的引用是否仍然存在。由于您有许多可能的连接,这可能不是最快的操作。然而,在一个相对较小的测试中它应该没问题。
  4. 您的场景中没有任何内容可以让我相信您需要利用垃圾收集来测试您的数据结构。此外,我相信您的数据结构正确地称为图形。祝你好运