我必须使用大小为 34000x34000 项的二维数组进行数学计算。
明显的问题 - CLR 不可能将如此大的数据部分存储在内存中。我尝试使用MemoryMappedFile
,但是当我尝试为对象创建查看器时它也失败了:MemoryMappedFile.CreateViewAccessor()
。还有其他已经存在的存储大型数组的方法吗?(因为我没有太多时间尝试实现自定义大数据存储)
谢谢
问问题
683 次
3 回答
8
<gcAllowVeryLargeObjects>
配置元素允许 64 位进程的超过 2 Gb 阵列。你可以试试看。
另外,看看稀疏数组是否可以帮助您:
稀疏数组是其中大部分元素具有默认值(通常为 0 或 null)的数组。大数组中零值元素的出现对于计算和存储都是低效的。
于 2015-09-18T16:03:07.957 回答
0
作为gcAllowVeryLargeObjects
考虑使用锯齿状数组的替代方案 - 处理一块巨大的内存(我猜双打大约 10GB)肯定需要一些额外的努力。
YourType[][] array = Enumerable.Range(0, 34000).Select(_ => new YourType[34000]).ToArray();
请注意,您肯定需要 x64 进程才能使用此类数组 - 确保仅使用 x64 显式构建您的 exe。
于 2015-09-18T16:18:39.550 回答