我有点没有主意了。使用以下代码,我尝试实例化一个大于 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>();
不负相思意
TA贡献1777条经验 获得超10个赞
一维数组不能包含多个int.MaxValue元素,即使它们可以大于 2gb <gcAllowVeryLargeObjects(例如new int[int.MaxValue / 2]~4gb)。要解决这个问题,您必须创建一个二维数组,或使用不同的类型,例如
public struct BytePair
{
public byte First, Second;
}
然后创建一个大小为BytePair[]等效大小一半byte[]的
- 2 回答
- 0 关注
- 241 浏览
添加回答
举报
0/150
提交
取消