And*_*rey 12 .net c# memory-management
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)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
在达到2mb的限制之后,我期待OutOfMemory异常,但没有任何反应.如果我打开任务管理器,我可以看到我的应用程序使用的内存量不断增长而没有任何限制.
我究竟做错了什么?提前致谢
Sas*_*ein 11
不,这不会限制进程使用的内存量.它只是一个包装器SetProcessWorkingSetSize,a)是一个建议,b)限制进程的工作集,这是这个进程可以消耗的物理内存(RAM)的数量.
它绝对不会在该进程中导致内存不足异常,即使它分配的内容远远超过您设置MaxWorkingSet属性的内容.
您可以尝试使用Win32作业对象API.在我提供的Codeplex(http://jobobjectwrapper.codeplex.com/)上有一个托管包装器.它允许您创建进程并限制此进程可以使用的内存量.
| 归档时间: |
|
| 查看次数: |
11287 次 |
| 最近记录: |