我最近在我的应用程序中追踪了内存泄漏,我想添加一个测试用例来检查它是否保持这种状态。我想做的是:
int numberOfInstancesBeforeFunction = GetNumberOfInstancesInMemory(typeof(MyClass));
PerformFunction();
GC.Collect();
int numberOfInstancesAfterFunction = GetNumberOfInstancesInMemory(typeof(MyClass));
Assert.AreEqual(numberOfInstancesBeforeFunction, numberOfInstancesAfterFunction, "mem leak");
这可能吗?
谢谢,
尤安
答案 0 :(得分:0)
有关如何使用WeakReference在@Adam Robinson here接受的答案中提供建议。
GetNumberOfInstancesInMemory
必须检查MyClass
对象WeakReference
的静态容器,以查看有多少返回thisReference.IsAlive = true;
(并移除任何有isAlive = false
的容器。
MyClass
的任何构造都会向静态容器添加对自身的引用。
我认为有一种优雅的Linq方式来封装所需的逻辑。
我不知道在没有将额外代码纳入MyClass
的情况下是否有任何方法可以做到这一点。