消耗1.5GB内存后,VS2010 C#64bit应用程序抛出OutOfMemoryException

Mir*_*rek 2 c# 64-bit out-of-memory visual-studio-2010

我希望在针对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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它确实显示OutOfMemoryException ...但是当它停止时,任务管理器显示一个1587443K的数字,这是1.5GB,如果它是针对x86构建的,我期望它.是的,操作系统是64位.

我忘记别的了吗?

Jon*_*eet 5

我忘记别的了吗?

是的 - 在.NET 4中,仍然存在每个对象2GB的限制.(您可以使用更多内存,但不能在单个对象中使用.)我怀疑您的列表需要重新分配其内部缓冲区,在单个阵列中需要~3GB.

如果设置配置参数,您可能会很高兴听到.NET 4.5支持更大的对象<gcAllowVeryLargeObjects>.