gpt4 book ai didi

c# - 在 32 位 .NET 进程中分配超过 1,000 MB 的内存

转载 作者:IT王子 更新时间:2023-10-28 23:29:38 24 4
gpt4 key购买 nike

我想知道为什么我不能在我的 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:垃圾收集没有帮助。

编辑,澄清我想要的:我编写了一个服务器应用程序,它在写入数据库/磁盘之前处理大量数据。我没有为所有内容创建临时文件,而是编写了一个内存缓存,这使得整个事情变得 super 快。但是内存是有限的,所以我试图找出限制是什么。并且想知道为什么我的小测试程序在正好 1000 MB 之后抛出 OutOfMemoryException。

最佳答案

拥有巨大的内存块绝不是一个好主意,即使在 64 位中也是如此。您会遇到连续内存和碎片的大问题。

这里的问题是找到一个连续的 block 。您可以尝试启用 3gb 模式(这可能有助于它找到更多字节)但我真的建议不要这样做。这里的答案是:

  • 使用更少的内存
  • 使用数据库/文件系统
  • 使用 x64

您可能还想阅读 Eric Lippert's博客(他似乎对每个常见的 .NET 问题都有一个博客条目......)

关于c# - 在 32 位 .NET 进程中分配超过 1,000 MB 的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1109558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com