2 Stimmen

.Net OutOfMemory auf dem Server, aber nicht auf dem Desktop

Ist es möglich, dass das .Net-Framework sich anders verhält, wenn es um Garbage Collection / Speicherbeschränkungen auf Serverumgebungen geht? Ich führe explizit x86 kompilierte Anwendungen auf einem 64bit Server mit 32gbs physischem Ram aus und mir geht der Speicher aus (SystemOutOfMemoryException), obwohl nichts außer dieser speziellen Anwendung läuft und der Server/alle anderen Anwendungen insgesamt 520mb nutzen aber ich kann dieses Verhalten auf meinem eigenen (Client Win7) Rechner nicht reproduzieren.

Nun weiß ich, dass die Anwendung speicherintensiv ist, aber warum verursacht sie Probleme auf dem Server und nicht auf dem Client?

2voto

MusiGenesis Punkte 72729

Die OutOfMemoryException in .NET bedeutet selten (wenn überhaupt), dass der Rechner buchstäblich keinen Speicherplatz mehr. OutOfSomeNecessaryCriticalResource wäre ein weniger irreführender Name gewesen.

El OutOfMemoryException bedeutet eigentlich nur, dass der Programmierer, was auch immer schief gelaufen ist, sich entschieden hat, diese spezielle Ausnahme in dieser speziellen Situation auszulösen. Zum Beispiel, der einfache Aufruf von Image.FromFile(...) auf ein beschädigtes JPEG (oder ein anderes Dateiformat, das .Net nicht öffnen kann), führt zu einer OutOfMemoryException nicht, weil .NET der Speicher ausgeht, sondern weil dies die dokumentierte Art der Ausnahme ist, die bei einer ungültigen Datei ausgelöst wird (fragen Sie mich nicht, warum, ich weiß es nicht).

Um Ihr spezielles Problem zu beheben, müssen Sie herausfinden, was die Ursache für die OutOfMemoryException (und wo und wann). Eine OutOfMemoryException bedeutet für sich genommen überhaupt nichts.

1voto

Hans Passant Punkte 894572

Ja, auf einem Windows-Server werden Sie eine andere Art von Garbage Collector verwenden. Er ist mehr auf die Bedürfnisse einer Server-Anwendung abgestimmt und sammelt Müll weniger aggressiv. Sie können dieses Verhalten mit einer app.config-Datei ändern, indem Sie die <gcServer> Element .

Das ist übrigens höchstwahrscheinlich nicht das eigentliche Problem. Ich würde vermuten, dass Ihre Anwendung ein realistischeres Nutzungsmuster aufweist. Absichtlich erzwingen x86-Modus, wenn Sie eine schöne 64-Bit-Server haben, ist etwas, das Sie vermeiden möchten, wenn Sie können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X