2

是否可以人为限制 .NET 进程可以使用的内存量?我正在寻找模拟低内存情况以进行测试。

现在我们使用虚拟机来处理这类事情。它有效,但我很想知道我们是否能找到更方便的方法。一个可以轻松自动化的将是理想的。

编辑:正如 Hans Passant 指出的那样,仅仅限制进程可用的虚拟内存量不会取代基于 VM 的测试。测试是为了性能,所以我需要交换而不是OutOfMemoryException.

4

3 回答 3

3

一个可以轻松自动化的将是理想的。

您可以使用Windows 作业对象从代码中进行管理。进程可以与作业相关联,并且JOBOBJECT_BASIC_LIMIT_INFORMATION允许您限制工作集的大小。

或者,您可以直接在进程上调用SetProcessWorkingSetSize,这将限制该进程的最大允许内存使用量。

于 2012-08-27T17:39:57.000 回答
1

windows Application Verifier 工具可以模拟低资源级别,例如低内存:http: //msdn.microsoft.com/en-us/library/aa480483.aspx

使用作业对象(正如@ReedCopsey 也建议)的更程序化的解决方案在这里: http: //www.codeproject.com/Articles/17831/How-to-Set-the-Maximum-Memory-a-Process-can-Use -在

于 2012-08-27T17:39:54.350 回答
1

现在我们使用虚拟机来处理这类事情

这可能意味着您限制了RAM的数量。这不是什么测试,Windows 进程永远不会耗尽 RAM。你只会减慢这个过程,操作系统会更频繁地交换页面。

真正的限制是可用的虚拟内存地址空间。这是 32 位进程的固定数字,2 GB。给予或采取一些非标准的选择来增加这个数字。OutOfMemoryException 告诉您该进程在 VM 中没有留下足够大的孔来适应分配。

您可以通过简单地分配一堆 50 兆字节的 byte[] 数组并将它们存储在List<byte[]>Main() 开头的静态类型变量中来限制 VM 空间的数量。

于 2012-08-27T18:08:29.237 回答