MSDN:
public IntPtr MaxWorkingSet { get; set; }
获取或设置允许的最大值 相关联的工作集大小 处理。物业价值:最高 允许的工作集大小 进程的内存,以字节为单位。
因此,据我所知,我可以限制进程可以使用的内存量。我试过这个,但没有运气..
一些代码:
public class A
{
public void Do()
{
List<string> guids = new List<string>();
do
{
guids.Add(Guid.NewGuid().ToString());
Thread.Sleep(5);
} while (true);
}
}
public static class App
{
public static void Main()
{
Process.GetCurrentProcess().MaxWorkingSet = new IntPtr(2097152);
try
{
new A().Do();
}
catch (Exception e)
{
}
}
}
在达到2mb的限制后,我期待OutOfMemory异常,但没有任何反应..如果我打开任务管理器,我可以看到我的应用程序使用的内存量不断增长而没有任何限制。
我做错了什么? 提前致谢
答案 0 :(得分:11)
不,这不会限制进程使用的内存量。它只是SetProcessWorkingSetSize
的包装,其中a)是推荐,b)限制进程的工作集,即物理内存的数量( RAM)这个过程可以消耗。
绝对不会导致该进程中出现内存不足异常,即使它分配的内容远远超过您设置MaxWorkingSet
属性的内容。
您可以尝试使用Win32作业对象API。在我提供的Codeplex(http://jobobjectwrapper.codeplex.com/)上有一个托管包装器。它允许您创建进程并限制此进程可以使用的内存量。