Rea*_*eel 2 .net c# arrays garbage-collection .net-4.5
按照这个网站在这里时,MaxSize of an array可以more than 2GB在x64环境,它可以容纳的是实际的元素UInt32.MaxValue.
所以,我已经使我的app.config像:
<configuration>
<runtime>
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我的数组声明和初始化是:
int idsCount = 999999999;
long[] ids = new long[idsCount];
Run Code Online (Sandbox Code Playgroud)
这远远小于UInt32.MaxValue,但OutofMemory Exception被抛出.
我有什么不对吗?
我的框架版本也是4.5
此失败的基本检查清单:
当您运行附带调试器的程序时,请注意默认启用的Visual Studio Hosting进程.它使用不同的 .config文件yourapp.vshost.exe.config.通过禁用选项Project + Properties,Debug选项卡,快速消除此类事故.
这仅在您的进程以64位模式运行时才有效,而不是新项目的默认模式.Project + Properties,Build选项卡,确保将Platform目标设置为AnyCPU,并取消选中"Prefer 32-bit mode"复选框.
当您在那里时,单击"应用程序"选项卡并仔细检查"目标"框架设置.当然必须是4.5或更高.
Windows版本很重要,不同版本对进程的最大VM大小有不同的限制.查看此MSDN页面并找到您的Windows版本和版本.例如,Windows 7 Home Basic遇到了麻烦,最多8 GB.
64位模式下的大量分配可能会在提交失败时失败.提交是在操作系统的页面文件中保留空间的技术术语.它充当后备存储,以防您的大型阵列需要被分页以便为其他进程腾出空间.如果你的机器没有超过8千兆字节的RAM可用,那么几乎可以肯定会发生.您可能将大小限制设置得太低,或者操作系统无法快速增加页面文件以提供您所需的空间.Mark Russinovich 在这篇博客文章中证明了这一点.