问题:
最近,我开始在一个包含大约650个单元测试的项目中遇到一个问题。
当我同时运行所有这些测试时,单元测试运行结束时的一些测试开始在System.OutOfMemoryException中失败。
当我再次运行失败的测试时,他们就通过了。
分析:
在运行测试时,我查看了任务管理器,以了解vstest.executionengine.x86.exe始终在增加,直到达到1330 MB的内存。然后,测试开始失败,出现内存不足异常。
当然,我确信我的一些类可能会有内存泄漏,但是我测试中的90%的类没有可能导致内存泄漏的代码。
我的许多测试类没有任何TestInitialize或TestCleanup方法,因为我的类的创建是直接在TestMethod测试中完成的,而且那些被测试的类没有实现IDiposable (因为没有可能导致泄漏的代码)。
问题:
现在我不知道我可能做错了什么。但是,我想知道为什么测试对象即使在运行了测试类的所有测试之后,仍然保留在内存中呢?
有没有人经历过这种情况,或者能指出我应该/可以做些什么来解决或定位这个问题?
谢谢!
发布于 2016-01-21 09:48:58
从您的测试项目中引用dotMemory单元框架,并将以下代码添加到OOM发生之前最后运行的测试中(或在OOM附近的某个地方)。
dotMemoryApi.GetSnapshot();
dotMemoryApi.SaveCollectedData();然后用dotMemory分析器打开这个快照,看看是什么浪费了内存。另外,看看大型对象堆,您可能对它的碎片有问题。
发布于 2019-02-12 14:12:34
我们有一个类似的问题:在我们的CI服务器上使用TFS和部署和运行功能测试任务运行测试时,测试器似乎不会在每次测试之后收集内存。我们在测试清理中添加了一个手动清理和一个手动GC收集,而不是获得内存异常--1,5GB内存使用量--我们现在保持在大约300 GC的内存使用量。
https://stackoverflow.com/questions/34901821
复制相似问题