在进程中很容易导致内存不足异常。
只需创建一个循环,在足够小的块中分配内存,而不是在大对象堆上(但不要太多导致异常),然后您可以尝试打开一个较小的文件,这将导致打开文件无法分配足够的连续内存,并且在不需要大文件的情况下打开文件时会出现 OOM 异常。像这样的东西...
List<byte[]> items = new List<byte[]>();
for (int i = 0; i < 10000; i++)
{
byte[] c = new byte[160000];
items.Add(c);
}
byte[] next = new byte[1000000000];
如果你按原样运行上面的代码,你会在最后一行得到一个OOM异常。但是,如果您先注释掉循环,它将执行没有错误。您可能需要稍微调整循环以使其每次打开文件都失败,但您可以做到。只需在调用之前运行循环以在测试中打开文件,您将耗尽大量内存并且您的打开应该失败。
此外,如果您可以选择设置 /3GB 开关,您可能需要考虑它。它并不总是正确的答案,它也有与之相关的缺点,但它会将虚拟内存拆分从 2GB/2GB 更改为 1GB/3GB,从而允许您的进程访问更多虚拟地址空间。这将为您可以打开的文件大小提供更多喘息空间。同样,在将其作为解决方案之前,您应该阅读有关这样做的缺点,并确保如果它有助于您的情况,它是值得的。
这是在服务器上启用它的方法