'System.OutOfMemoryException " wurde ausgelöst, wenn es ist immer noch genug Speicher frei

Dies ist mein code:

int size = 100000000;
double sizeInMegabytes = (size * 8.0) / 1024.0 / 1024.0; //762 mb
double[] randomNumbers = new double[size];

Ausnahme:
Ausnahme des Typs " System.OutOfMemoryException " wurde ausgelöst.

Ich habe 4 GB Speicher auf dieser Maschine 2,5 GB frei wenn ich dieses ausführen, es ist eindeutig genug Speicherplatz auf dem PC zu handhaben, die 762mb von 100000000 Zufallszahlen. Ich brauche, um zu speichern, wie viele Zufallszahlen wie möglich, da Verfügbarer Speicher. Wenn ich in die Produktion gehen wird es 12 GB auf die box und ich wollen es nutzen.

Funktioniert die CLR zwingst mich zu einer Standard-max-Speicher, mit zu beginnen? und wie fordere ich mehr?

Update

Dachte ich, brechen diese in kleinere Abschnitte zu unterteilen und nach und nach hinzufügen zu meinen Anforderungen an den Arbeitsspeicher würde helfen, wenn das Problem ist aufgrund Fragmentierung des Speichersaber es funktioniert nicht ich kann nicht vorbei an insgesamt ArrayList Größe von 256 MB, unabhängig davon, was ich tun 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()));                
  }
}

Aus meiner main-Methode:

int blockSize = 1000000;

while (true) {
  try
  {
    AddNDRandomNumbers(blockSize);                    
  }
  catch (System.OutOfMemoryException ex)
  {
    break;
  }
}            
double arrayTotalSizeInMegabytes = (ndRandomNumbers.Count * 8.0) / 1024.0 / 1024.0;

InformationsquelleAutor der Frage m3ntat | 2009-07-20

Schreibe einen Kommentar