为了账号安全,请及时绑定邮箱和手机立即绑定

gcAllowVeryLargeObjects 已设置但仍导致 System.ArgumentOut

gcAllowVeryLargeObjects 已设置但仍导致 System.ArgumentOut

C#
holdtom 2023-07-09 09:59:58
我有点没有主意了。使用以下代码,我尝试实例化一个大于 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
查看完整描述

2 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

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

相反,尝试使用动态增长的列表:

var b = new List<byte>();


查看完整回答
反对 回复 2023-07-09
?
不负相思意

TA贡献1777条经验 获得超10个赞

一维数组不能包含多个int.MaxValue元素,即使它们可以大于 2gb <gcAllowVeryLargeObjects(例如new int[int.MaxValue / 2]~4gb)。要解决这个问题,您必须创建一个二维数组,或使用不同的类型,例如


public struct BytePair

{

    public byte First, Second;

}

然后创建一个大小为BytePair[]等效大小一半byte[]的


查看完整回答
反对 回复 2023-07-09
  • 2 回答
  • 0 关注
  • 241 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信