我必须使用尺寸为34000x34000项的二维数组进行数学计算。
明显的问题 - CLR不可能在内存中存储如此大的数据部分。我尝试使用MemoryMappedFile
,但在我尝试为对象创建查看器时它也失败了:MemoryMappedFile.CreateViewAccessor()
。是否还有其他已存在的存储大型数组的方法? (因为我没有太多时间尝试实现自定义大数据存储)
感谢
答案 0 :(得分:8)
<gcAllowVeryLargeObjects>
配置元素允许64位进程使用2-Gb数组。你可以尝试一下。
另外,看看sparse arrays是否可以帮助您:
稀疏数组是一个数组,其中大多数元素都有默认值(通常为0或null)。大数组中零值元素的出现对于计算和存储都是低效的。
答案 1 :(得分:0)
如果您使用的是.NET 4.5,则可以使用myApp.controller('myController', ['$scope', 'identityFactory', 'databaseFactory', function ($scope, identityFactory, databaseFactory) {
$scope.query = JSON.stringify({
'username': identityFactory.getLoginPair()[0],
'password': identityFactory.getLoginPair()[1],
'query': 'SELECT * FROM TABLE1;'
});
databaseFactory.querydb($scope.query).then(function (response) {
$scope.rows = angular.fromJson(response.data);
$scope.cols = Object.getOwnPropertyNames($scope.rows[0]);
}, function (response) {
$scope.rows = response.data || "Request failed";
$scope.status = response.status;
});
$scope.setBsClass = function (row) {
if (row['ColName'] == 'Condition') {
return 'danger';
};
};
}]);
- config元素。它配置GC,以便它允许内存中大于2GB的对象。请参阅this,“我的应用适用于大型数据集(使用对象&gt; 2GB)”,分别为this。
答案 2 :(得分:0)
作为gcAllowVeryLargeObjects
的替代方案,考虑使用锯齿状数组 - 处理一块巨大的内存(我想大约10GB用于双打)肯定需要额外的努力。
YourType[][] array = Enumerable.Range(0, 34000).Select(_ => new YourType[34000]).ToArray();
请注意,您肯定需要x64进程才能使用此类数组 - 请确保仅使用x64显式构建exe。