2009-04-22 11 views
3

Ich bekomme OutOfMemory-Ausnahme in meinem .net-Addin. Das Add-In verwendet eine große Anzahl verwalteter und nicht verwalteter Objekte. Gibt es eine Möglichkeit, diese Ausnahme zu fangen?So fangen Sie die OutOfMemoryException in .NET (Excel-Add-In)

Aktualisiert: Ich denke, jede Anwendung kann eine OutofMemory-Ausnahme erhalten, wenn sie eine große Menge an Daten verarbeitet, die verarbeitet werden müssen und nicht regelmäßig freigegeben werden. Angenommen, ich habe eine Methode, die einige Strukturen im Speicher analysiert. Ich gebe ihm 300 Strukturen, er lädt jeden von ihnen in den Speicher, analysiert sie und beendet die Verarbeitung. Bei dieser Operation war die Speicherauslastung X. Wenn ich nun 3000 Strukturen für die Verarbeitung gebe, werden diese 3000 im Speicher analysiert und die Speicherauslastung wird auf 10X gehen.

Aktualisiert

Dieses Problem wird nur in Excel 2007 und nicht in Excel 2003 zu sehen, die ich, warum ich ein MSDN Personal gebeten haben, diese zu prüfen.

+4

OOM, zusammen mit ein paar andere wie Stackoverflow, in der Regel eine sehr ungesunde App bedeuten, die kurz aus seinem Elend werden soll setzen ... –

Antwort

3

In .Net wird die OutOfMemoryException von der Laufzeit ausgelöst, wenn sie den angeforderten Speicher für Ihre Anwendung nicht zuordnen kann. Daher gibt es sehr wenig wirkliche Arbeit, die getan werden kann, um mit einer solchen Ausnahme umzugehen.

Anstatt es zu fangen, sollten Sie verhindern, dass es überhaupt passiert. Das Ignorieren der Ausnahme wird das Problem nicht verschwinden lassen.

+2

Accepted Dies ist die Antwort, denn nach einer weiteren Untersuchung haben die MSDN-Leute herausgefunden, dass Excel nicht mehr im Speicher ist, da die verfügbaren GDI-Objekte alle von Strukturen (Bildern) aufgebraucht sind. Das standardmäßig verfügbare GDI-Objektlimit für einen Prozess beträgt 10.000 (das durch Anpassen der Registrierung auf 65536 erhöht werden kann, dies jedoch nicht empfohlen wird). Ich habe jetzt die Anzahl der GDI-Objekte überprüft, die von den Strukturen verwendet werden. "Anstatt es zu fangen, sollten Sie verhindern, dass es passiert" – A9S6

+0

Das ist gut zu wissen. Danke für das Update. –

0

Wenn Sie eine OutOfMemoryException erhalten haben, ist Ihr Programm abgestorben, hat aufgehört zu existieren, es ist nicht mehr und ist gegangen, um seinen Hersteller zu treffen.

Aber im Ernst, es ist nicht in der Lage, etwas von dem Speicher, der es ausgeht, zu erholen, so dass Sie nichts tun können.

Verwandte Themen