2009-03-20 5 views
1

Ich versuche, die Menge an Speicher zu reduzieren, die meine Anwendung verwendet. In meiner Anwendung verwende ich System.Reflection.Emit.EnumBuilder zum Erstellen von Enumerationen im laufenden Betrieb aus Informationen, die ich zur Laufzeit erhalte. Ich benutze den EnumBuilder nur, um eine individuelle Aufzählung zu erstellen, und danach habe ich keine weitere Verwendung dafür. Bei der Verwendung von CLRProfiler habe ich festgestellt, dass die EnumBuilder niemals zerstört werden. Meine Anwendung kann während der Ausführung Tausende von Aufzählungen erstellen, sodass sich die von diesen EnumBuildern verwendete Speichermenge summieren kann. EnumBuilder definiert keine Dispose-Methode, daher kann ich sie nicht auf diese Weise zerstören. Ist es möglich, übrig gebliebene EnumBuilder aus dem Speicher zu entfernen?Zerstören Sie den EnumBuilder nach dem Erstellen einer Enum?

Antwort

1

Ich habe das gleiche bemerkt. Es ist ein 'Leck' in ModuleBuilder, das an den Bytes und Strings IIRC hängt.

Sie können in WinDbg mit SOS geladen für bessere Speicherinformationen suchen.

4

EnumBuilder erstellt die Aufzählung in einer dynamischen Assembly. Gemäß How to: Load and Unload Assemblies (C# -Programmierhandbuch) können Sie eine Assembly nicht entladen, ohne alle App-Domänen zu entladen, die sie verwenden. Insbesondere:

"Auch wenn die Assembly den Gültigkeitsbereich verlässt, bleibt die tatsächliche Assembly-Datei geladen, bis alle Anwendungsdomänen, die sie enthalten, entladen werden."

2

Meine Anwendung kann Tausende von Aufzählungen machen beim Laufen,

Warum? Es klingt, als ob du etwas tust, was du wahrscheinlich nicht tun solltest.

Verwandte Themen