根据本网站 here ,MaxSize of an array
在x64
环境下可以2GB
并且实际可以容纳的元素是UInt32.MaxValue
。
所以,我将我的 app.config 设置为:
<configuration>
<runtime>
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
</configuration>
我的数组声明和初始化是:
int idsCount = 999999999;
long[] ids = new long[idsCount];
这比 UInt32.MaxValue
小得多,但抛出了 OutofMemory Exception。
我做错了吗?
我的Framework版本也是4.5
最佳答案
此故障的基本检查 list :
当您在附加调试器的情况下运行程序时,请注意默认启用的 Visual Studio 托管进程。它使用不同的 .config 文件,yourapp.vshost.exe.config。通过禁用选项、Project + Properties、Debug 选项卡,快速消除此类事故。
这仅在您的进程以 64 位模式运行时有效,而不是新项目的默认模式。 Project + Properties,Build 选项卡,确保将 Platform target 设置为 AnyCPU 并取消选中“Prefer 32-bit mode”复选框。
在那里,单击“应用程序”选项卡并仔细检查“目标框架”设置。当然必须是 4.5 或更高。
Windows 版本很重要,不同版本对进程的最大 VM 大小有不同的限制。评论this MSDN page并找到您的 Windows 版本。例如,最大 8 GB 的 Windows 7 Home Basic 会遇到问题。
64 位模式下的大型分配可能会因提交失败 而失败。提交是在操作系统的页面文件中保留空间的技术术语。它充当后备存储,以防您的大型阵列需要分页以为其他进程腾出空间。如果您的机器没有超过 8 GB 的可用 RAM,则几乎可以保证会发生这种情况。您可能将大小限制设置得太低,或者操作系统无法足够快地增加页面文件来为您提供所需的空间。在 this blog post 中表现良好Mark Russinovich 着。
关于c# - .Net Framework 4.5 中数组的 MaxSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25225249/