从测试代码中使用Sos(dumpheap等)?

时间:2010-10-03 13:24:03

标签: .net memory garbage-collection memory-leaks

我最近在我的应用程序中追踪了内存泄漏,我想添加一个测试用例来检查它是否保持这种状态。我想做的是:

 int numberOfInstancesBeforeFunction = GetNumberOfInstancesInMemory(typeof(MyClass));

 PerformFunction();

 GC.Collect();

 int numberOfInstancesAfterFunction = GetNumberOfInstancesInMemory(typeof(MyClass));

 Assert.AreEqual(numberOfInstancesBeforeFunction, numberOfInstancesAfterFunction, "mem leak");

这可能吗?

谢谢,

尤安

1 个答案:

答案 0 :(得分:0)

有关如何使用WeakReference在@Adam Robinson here接受的答案中提供建议。

GetNumberOfInstancesInMemory必须检查MyClass对象WeakReference的静态容器,以查看有多少返回thisReference.IsAlive = true;(并移除任何有isAlive = false的容器。

MyClass的任何构造都会向静态容器添加对自身的引用。

我认为有一种优雅的Linq方式来封装所需的逻辑。

我不知道在没有将额外代码纳入MyClass的情况下是否有任何方法可以做到这一点。