Mein Programm erzeugt OutOfMemoryExcetion
nur im Release-Modus, Kompilieren mit VS2010 C# Compiler. Die Operation, die es durchgeführt wurde, wenn der Absturz aufgetreten ist, war Instanziierung 1600 gezackte Arrays, und es brach, wenn bei der 207. der vereinfachten Version der Schleife unten:
Double[][] arr = new Double[1600][];
int i = 0;
while (i < 1600)
{
arr[i] = new Double[1000000];
i++;
}
Im Grunde genommen würde allein dieser Teil des Codes ~ 11,9 GB erzeugen, wenn man bedenkt, dass ein Double 8 Byte verbraucht. Ich habe nicht diese Menge an RAM, aber in eine andere Frage, in der ich fragte, was passiert, wenn der Arbeitsspeicher zu Ende ist Sie antworteten mir, dass die CLR einen Auslagerungsspeicher erstellt, obwohl sie nur eine genau definierte Menge an Speicher adressieren kann.
Wenn ich mein Programm im DEBUG-Modus kompiliere, löst es nicht die OutOfMemoryException
stattdessen wird eine Menge Speicher zugewiesen und das Programm läuft weiter... Ich hatte nicht genug Geduld, um zu prüfen, ob das Programm reibungslos, wenn auch langsam, bis zum Ende laufen würde, weil es zu lange dauerte.
Also:
- Was ist im Freigabemodus passiert, was im Debugmodus nicht der Fall war, so dass das Programm dort eine Exception ausgelöst hat?
- In Anbetracht der Tatsache, dass ich diese Menge an Speicher wirklich speichern muss, weil es sich um Daten handelt, die durch einige wissenschaftliche Berechnungen erzeugt wurden, was sind Ihre Ratschläge, um dieses Problem zu lösen? (Ich erwäge, die generierten Daten während der Berechnungen zu verarbeiten, obwohl dies etwas mehr Zeit während der Berechnungen selbst in Anspruch nehmen würde, anstatt eine Menge Daten zu generieren und sie dann zu verarbeiten...)