0

我必须使用大小为 34000x34000 项的二维数组进行数学计算。

明显的问题 - CLR 不可能将如此大的数据部分存储在内存中。我尝试使用MemoryMappedFile,但是当我尝试为对象创建查看器时它也失败了:MemoryMappedFile.CreateViewAccessor()。还有其他已经存在的存储大型数组的方法吗?(因为我没有太多时间尝试实现自定义大数据存储)

谢谢

4

3 回答 3

8

<gcAllowVeryLargeObjects>配置元素允许 64 位进程的超过 2 Gb 阵列。你可以试试看。

另外,看看稀疏数组是否可以帮助您:

稀疏数组是其中大部分元素具有默认值(通常为 0 或 null)的数组。大数组中零值元素的出现对于计算和存储都是低效的。

于 2015-09-18T16:03:07.957 回答
0

如果您使用的是 .NET 4.5,则可以使用<gcAllowVeryLargeObjects enabled="true|false"/>-config 元素。它配置 GC 以便它允许内存中大于 2GB 的对象。请参阅,“我的应用程序适用于大型数据集(使用对象 > 2GB)”部分,分别为this

于 2015-09-18T16:06:51.440 回答
0

作为gcAllowVeryLargeObjects考虑使用锯齿状数组的替代方案 - 处理一块巨大的内存(我猜双打大约 10GB)肯定需要一些额外的努力。

YourType[][] array = Enumerable.Range(0, 34000).Select(_ => new YourType[34000]).ToArray();

请注意,您肯定需要 x64 进程才能使用此类数组 - 确保仅使用 x64 显式构建您的 exe。

于 2015-09-18T16:18:39.550 回答