我想知道为什么我无法在 32 位 .NET 进程中分配超过 1,000 MB 的内存。以下迷你应用程序在分配 1,000 MB 后抛出 OutOfMemoryException。为什么是 1,000 MB,而不是 1.8 GB?是否有我可以更改的流程范围设置?
static void Main(string[] args)
{
ArrayList list = new ArrayList();
int i = 0;
while (true)
{
list.Add(new byte[1024 * 1024 * 10]); // 10 MB
i += 10;
Console.WriteLine(i);
}
}
PS:垃圾收集没有帮助。
编辑,澄清我想要什么:我编写了一个服务器应用程序,它在写入数据库/磁盘之前处理大量数据。我没有为所有内容创建临时文件,而是编写了一个内存缓存,这使得整个过程超级快。但记忆是有限的,所以我试图找出限制是什么。我想知道为什么我的小测试程序在恰好 1,000 MB 后抛出 OutOfMemoryException。
拥有巨大的内存块从来都不是一个好主意,即使在 64 位中也是如此。连续内存和碎片会带来大问题。
这里的问题是找到一个连续的块。您可以尝试启用 3gb 模式(这可能有助于它找到更多字节),但我really建议不要这样做。这里的答案是:
- 使用更少的内存
- 使用数据库/文件系统
- use x64
您可能还想阅读埃里克·利珀特的 http://blogs.msdn.com/ericlippert/archive/2009/06/08/out-of-memory-does-not-refer-to-physical-memory.aspx博客(他似乎对每个常见的 .NET 问题都有一个博客条目......)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)