这是我的暗号:
int size = 100000000;
double sizeInMegabytes = (size * 8.0) / 1024.0 / 1024.0; //762 mb
double[] randomNumbers = new double[size];
例外: 抛出了类型为“ System.OutOfmemyException”的异常。
我在这台机器上有4 GB 的内存2.5 GB 是空闲的 当我开始这个运行时,电脑上显然有足够的空间来处理762兆的10000000个随机数字。我需要存储尽可能多的随机数给予可用的内存。当我去生产将有12 GB 的盒子,我想利用它。
CLR 是否将我限制在默认的最大内存开始? 我如何请求更多?
更新
我认为,如果这个问题是由于 内存碎片引起的,那么将它分解成更小的块并逐步增加内存需求会有所帮助,但它不是 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;