2016-01-20 116 views
-1

问题:MSTest的内存溢出的异常

最近,我开始面对我的项目中包含大约650单元测试的一个问题。

当我一次运行所有这些测试时,单元测试运行结束时的一些测试开始失败,出现System.OutOfMemoryException

当我再次运行失败的测试时,它们会通过。

分析:

我看了看任务管理器运行我的测试,同时要看到,vstest.executionengine.x86.exe一直增加,直到达到1330 MB的内存。然后,由于内存不足异常,测试开始失败。

当然可以肯定的是,我的一些类可能会有内存泄漏,但我测试的类中有90%没有可能导致内存泄漏的代码。

我的许多测试类的没有任何TestInitializeTestCleanup方法,因为我的课的创建直接完成TestMethod测试内部,因为在测试这些类没有实现IDiposable(因为没有代码,可以导致泄漏)。

问题:

现在我不知道我可能是做错了。但是我想知道即使在测试类的所有测试都运行之后,测试对象仍然保留在内存中吗?

有没有人遇到过这个问题,或者可以指点我应该/可以做些什么来修复或找到问题?

谢谢!

回答

1

参考dotMemory Unit从您的测试项目框架,并添加以下代码的最后OOM发生之前运行的测试(或接近OOM的地方)。

dotMemoryApi.GetSnapshot(); 
dotMemoryApi.SaveCollectedData(); 

然后打开该快照与dotMemory探查和寻找什么浪费内存。 也看大对象堆,它可能有你的碎片问题。