c# - .Net Framework 4.5 中数组的 MaxSize

标签 c# .net arrays garbage-collection .net-4.5

根据本网站 here ,MaxSize of an arrayx64环境下可以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/

相关文章:

c# - 更改 DataGridView 标题单元格的文本对齐方式和字体大小

c# - 格式化 DataTable 列的百分比

c# - 当其他可观察值为 true 时,从可观察值中获取项目

c++ - 无法在类中使用以数组作为参数的函数模板

c# - 有没有更简洁的方法可以在 C# 中进行排序?

.net - WPF 中的 Window StateChanging 事件

c# - 从一个流下载文件并将其保存到另一个流中的 zip 中,而不将所有数据放入内存中

c# - 从 windbg 的 clrstack 输出中获取对象详细信息

arrays - 扩展 Swift 数组以按类型过滤元素

java - 如何在jsp中将数组打印到输入字段?