【发布时间】:2016-05-06 05:33:04
【问题描述】:
根据许多 SO 答案和this widely cited blog post,为“任何 CPU”构建并选择了“首选 32 位”选项的 .NET 4.5 应用程序将在 32 位和 64 位上作为 32 位进程运行位系统(与 .NET 4.0 及更早版本不同)。 换句话说,x86 和 AnyCPU 选择了 'prefer 32-bit' 是等效的(忽略它是否可以在 ARM 上运行)。
但是,我的测试表明,在 64 位系统上,“AnyCPU 首选 32 位”应用程序(我确认它运行 32 位)可以分配比 x86 更多的内存。我编写了一个 .NET 4.5 C# 控制台应用程序,它在循环中分配 10MB 字节数组(当然保留引用),直到它遇到 OutOfMemoryException,并在具有大量 RAM 的 64 位系统上运行它。当构建为 x86 时,它分配了大约 1.2GB。构建为“任何 CPU(首选 32 位)”的相同代码最高可达 1.5GB。
为什么不一样?
【问题讨论】:
标签: c# .net visual-studio-2015 out-of-memory .net-4.5