如何使.NET进程耗尽内存而不会耗尽所有系统内存

Jus*_*ing 6 .net nunit unit-testing out-of-memory

问题很简单我有一个进程,它在某些xml文件上执行ETL.我们开始获得非常大的xml文件,并开始获得OutOfMemoryExceptions.

修复过程相对简单.但是,我想为我的NUnit套件进行单元测试,以确保该过程将继续能够处理真正大的文件.但是,实际上我的开发工作站上的内存不足会降低我的机器速度,而且非常耗时.在版本控制中存储一个巨大的测试文件也是一个坏主意.如果我可以人为地限制一个进程,线程或appdomain只使用固定数量的ram,让我说128 megs,我可以进行一个小型的单元测试,不会让我的工作站瘫痪.

有什么建议?他们的一些非托管API是否可以P/Invoke?

mqp*_*mqp 0

我不太明白你在这里得到什么。假设您以某种方式创建了一个人为的小型“测试环境”,该环境无法分配同样大的内存块,因此它会在较小的文件上抛出 OutOfMemoryExceptions。你得到了什么?单元测试应该测试您是否可以在真实系统上处理更大的文件,对吗?

重要的是,您可以在文件将要运行的任何系统上处理“所需大小的文件”,并且除了在该系统上尝试该文件之外,没有真正的方法对其进行单元测试。

(一个更小、不太重要的事情可能是你是否OutOfMemoryException优雅地处理 s,但你不需要实际耗尽内存来测试它;只需让你的方法偶尔抛出一个异常,并观察它是否做了正确的事情.)