C#增加堆大小 - 是否可能

Jac*_*ada 11 c#

在读取大量文件时,使用C#时出现内存不足异常

我需要更改代码但是暂时可以增加堆大小(就像我在Java中一样)作为一个shaort术语修复?

GvS*_*GvS 8

.Net自动完成.

看起来你已经达到了内存的限制.Net进程可以用于它的对象(在32位机器上,这是2个标准或3GB,使用/ 3GB启动开关.信用Leppie和Eric Lippert获取信息).

重新思考您的算法,或者更改64位计算机可能会有所帮助.

  • 让我们在这里准确.一个进程可以*任意*多*内存* - 32位窗口的每进程限制足够大,你实际上从未实现过它.在所有内存中,任何时候只有2GB可以*映射到用户地址空间*.或者,如果你有3GB的开关,可以映射3GB.(3GB交换机不会为您提供4GB的地址空间;出于某种原因,它被称为"3GB交换机".)由于.NET堆始终映射到用户地址空间,因此限制了自动提供给托管程序的地址空间. (6认同)
  • @OregonGhost:如果你分配一个800MB的连续块(​​就像一个数组),你可能没有足够的虚拟空间. (2认同)

Ste*_*ven 5

不,这是不可能的.出现此问题的原因可能是您在32位操作系统上运行且内存过于分散.尽量不要将整个文件加载到内存中(例如,通过逐行处理),或者,当您确实需要完全加载它时,将其加载到多个较小的部分中.