我可以限制进程的RAM使用量吗?

时间:2012-08-27 17:37:06

标签: c# .net windows

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

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

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

3 个答案:

答案 0 :(得分:3)

  

可以很容易实现自动化的是理想的。

您可以使用Windows Job Objects从代码中管理此内容。进程可以与作业关联,JOBOBJECT_BASIC_LIMIT_INFORMATION允许您限制工作集大小。

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

答案 1 :(得分: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-at

答案 2 :(得分:1)

  

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

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

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

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