gcAllowVeryLargeObjects 已设置但仍导致 System.ArgumentOut

我有点没有主意了。使用以下代码,我尝试实例化一个大于 2GB 的字节数组:


var b = Array.CreateInstance(typeof(byte), uint.MaxValue);

每次都会引起System.ArgumentOutOfRangeException异常,并显示以下消息arrays larger then 2GB are not supported。


我的 App.config 目前如下:


<?xml version="1.0" encoding="utf-8" ?>

   <configuration>

      <startup> 

         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>

      </startup>

      <runtime>

         <gcAllowVeryLargeObjects enabled="true" />

      </runtime>

   </configuration>

此外,该项目的目标平台是x64


如果有任何想法,我将不胜感激。如果有任何信息丢失,我会尽快更新问题。


更新1

我也尝试过uint.MaxValue


holdtom
浏览 262回答 2
2回答

GCT1015

仅出于完整性检查,您尝试分配 9.223 EB(艾字节)连续内存块,即 9.223×10^9 GB(千兆字节)。很简单,但您甚至无法在 x64 机器上执行此操作,因为无论如何都会使用一些内存,而且这将是最大的。相反,尝试使用动态增长的列表:var b = new List<byte>();

不负相思意

一维数组不能包含多个int.MaxValue元素,即使它们可以大于 2gb <gcAllowVeryLargeObjects(例如new int[int.MaxValue / 2]~4gb)。要解决这个问题,您必须创建一个二维数组,或使用不同的类型,例如public struct BytePair{&nbsp; &nbsp; public byte First, Second;}然后创建一个大小为BytePair[]等效大小一半byte[]的
打开App,查看更多内容
随时随地看视频慕课网APP