Gac*_*cek 19 c# simulation memory-management out-of-memory
我需要重构我的项目,以使其免受OutOfMemory异常的影响.
我的项目中使用了大量的集合,通过更改一个参数,我可以使我的程序更准确或使用更少的内存......
好的,那就是背景.我想做的是在循环中运行例程:
OutOfMemory异常,更改参数并尝试再次运行它.现在,我想测试一下.我知道,我可以OutOfMemory自己抛出异常,但我想模拟一些真实的情况.
所以主要的问题是:
有没有办法为我的程序设置某种内存限制,在达到OutOfMemory异常后会自动抛出?
例如,我想设置一个限制,假设我的整个程序有400MB的内存来模拟系统中有这么多可用内存的情况.
可以吗?
Alf*_*dBr 17
这看起来像... System.Runtime.MemoryFailPoint的工作.
http://msdn.microsoft.com/en-us/library/system.runtime.memoryfailpoint.aspx
我认为链接中的示例符合您的情况.将MemoryFailPoint设置为您需要的任何级别,然后捕获InsufficientMemoryException并相应地调整输入参数.
public void EatMemory()
{
List<byte[]> wastedMemory = new List<byte[]>();
while(true)
{
byte[] buffer = new byte[4096]; // Allocate 4kb
wastedMemory.Add(buffer);
}
}
Run Code Online (Sandbox Code Playgroud)
除非你有12gb的RAM,否则不应该花很长时间:)
我想建议另一种看待这个问题的方式。您不一定要耗尽内存。您只需要监视所使用的内存量,并将其与系统总内存进行比较。也许像GC.GetTotalMemory这样的东西在这里会很有用,可以查看您的应用程序使用了多少内存。那么也许本文将有助于获取系统上可用的物理 RAM 总量。