当应用程序是针对 x64 构建时,我想查看 System.OutOfMemoryException 以及任务管理器中消耗的内存。应用程序属性的“构建”选项卡中有两个下拉菜单:“平台目标”和“平台”,两者均设置为 x64。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<long> lst = new List<long>();
while (true)
{
lst.Add(long.MaxValue);
}
}
}
}
它确实显示 OutOfMemoryException...但是当它停止时,任务管理器显示一个类似 1587443K 的数字,即 1.5GB,如果它是针对 x86 构建的,我会期望它。 是的,操作系统是 64 位。
我是不是忘记了什么?
最佳答案
Am I forgetting something else?
是的 - 在 .NET 4 中,每个对象仍然有 2GB 的限制。 (您可以使用更多内存,但不能在单个对象中使用。)我怀疑您的列表需要重新分配其内部缓冲区,在单个数组中需要约 3GB。
您可能会很高兴听到 .NET 4.5 supports larger objects如果您设置 <gcAllowVeryLargeObjects>
配置参数。
关于c# - VS2010 C# 64 位应用程序在消耗 1.5GB 内存后抛出 OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13161939/