System.OutOfMemoryException была выброшена, когда все еще много свободной памяти
Это мой код:
int size = 100000000;
double sizeInMegabytes = (size * 8.0) / 1024.0 / 1024.0; //762 mb
double[] randomNumbers = new double[size];
Исключение: Исключение типа «System.OutOfMemoryException» был брошен.
I have 4GB memory on this machine 2.5GB is free когда я запускаю этот прогон, на компьютере явно достаточно места для обработки 762 Мб из 100000000 случайных чисел. Мне нужно хранить как можно больше случайных чисел с учетом доступной памяти. Когда я пойду в производство, на коробке будет 12 ГБ, и я хочу использовать его.
Does the CLR constrain me to a default max memory to start with? and how do I request more?
Update
Я думал, что разбив это на более мелкие куски и постепенно увеличивая мои требования к памяти, поможет, если проблема связана сmemory fragmentation, но это не такI can't get past a total ArrayList size of 256mb regardless of what I do tweaking 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;