Это мой код:
int size = 100000000;
double sizeInMegabytes = (size * 8.0) / 1024.0 / 1024.0; //762 mb
double[] randomNumbers = new double[size];
Исключение: Исключено исключение типа "System.OutOfMemoryException".
У меня 4 ГБ памяти на этой машине 2.5 ГБ бесплатно, когда я запускаю этот запуск, на ПК достаточно места для обработки 762 МБ из 100000000 случайных чисел. Мне нужно хранить как можно больше случайных чисел с учетом доступной памяти. Когда я пойду на производство, на коробке будет 12 ГБ, и я хочу использовать его.
Скрывает ли среда CLR максимальную память по умолчанию? и как я могу запросить больше?
Обновление
Я думал, что это взломать на более мелкие куски, и поэтапное добавление к моим требованиям к памяти поможет, если проблема связана с фрагментацией памяти, но она не , я не могу пройти мимо общий размер массива ArrayList размером 256 МБ, независимо от того, что я делаю для создания блока blockSize.
private static IRandomGenerator rnd = new MersenneTwister();
private static IDistribution dist = new DiscreteNormalDistribution(1048576);
private static List<double> ndRandomNumbers = new List<double>();
private static void AddNDRandomNumbers(int numberOfRandomNumbers) {
for (int i = 0; i < numberOfRandomNumbers; i++) {
ndRandomNumbers.Add(dist.ICDF(rnd.nextUniform()));
}
}
Из моего основного метода:
int blockSize = 1000000;
while (true) {
try
{
AddNDRandomNumbers(blockSize);
}
catch (System.OutOfMemoryException ex)
{
break;
}
}
double arrayTotalSizeInMegabytes = (ndRandomNumbers.Count * 8.0) / 1024.0 / 1024.0;