这是我的代码:
int size = 100000000;
double sizeInMegabytes = (size * 8.0) / 1024.0 / 1024.0; //762 mb
double[] randomNumbers = new double[size];
异常:引发了类型为'System.OutOfMemoryException'的异常。
我在这台机器上有4GB内存,开始运行时有2.5GB可用空间,PC上显然有足够的空间来处理762mb的100000000随机数。给定可用内存,我需要存储尽可能多的随机数。当我开始生产时,包装盒上将有12GB,我想利用它。
CLR是否将我限制为默认的最大内存开始?以及我如何要求更多?
更新资料
我认为如果问题是由于内存碎片造成的话,将它分成较小的块并逐步增加我的内存需求将会有所帮助,但是不管我做什么调整blockSize,我都无法超过256mb的总ArrayList大小。
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;