3 Stimmen

Speicherleck und Schwache Referenzen

Ich habe ein Problem, das wie ein Speicherleck in einer meiner Anwendungen aussieht (die Anwendung verbraucht im Laufe der Zeit mehr Speicher und bleibt nach etwa einer Woche Arbeit hängen).

Ich habe einige Lecks in Bezug auf Klassen, die ich geschrieben habe, erkannt und behoben (der Vergleich von Heap-Dumps mit sos.dll hat sie schnell aufgedeckt), und diese nehmen nicht mehr zu.

Der einzige signifikante Anstieg im Laufe der Zeit erfolgt derzeit bei WeakReference-Instanzen, die mit einer gleichmäßigen Rate von 1.000 neuen WeakReference-Instanzen pro Minute zunehmen.

Mein Code verwendet WeakReference nicht direkt, ich erstelle sie nie selbst.

Was könnte so viele WeakReference-Instanzen dazu veranlassen, erstellt zu werden?

Ich verwende VB.NET, Visual Studio 2008 und .NET 3.5

8voto

Hans Passant Punkte 894572

Ja, dies ist ein ziemlich bekanntes Leck in VB.NET-Assemblys. Es wird durch schwache Verweise verursacht, die Ereignisse verfolgen, die mit dem WithEvents-Schlüsselwort deklariert sind. Diese Verfolgung erfolgt zur Unterstützung von Edit and Continue. Es tritt ein Leck auf, bei dem für jedes mit WithEvents deklarierte Ereignis in einer Klasse eine Instanz von WeakReference verloren geht. Der Debugger muss angehängt sein, um diese WeakReference-Objekte freizugeben.

Der Workaround ist einfach. Versenden Sie die Release-Version, nicht die Debug-Version.

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