Kürzlich bemerkte ich, dass meine Anwendung scheint, Speicher zu essen, der nie veröffentlicht wird. Nach dem Profiling mit CLRProfiler habe ich festgestellt, dass der Castle Windsor Container, den ich verwende, Objekte festhält. Diese Objekte werden mit dem Attribut lifestyle = "transient" in der Konfigurationsdatei xml deklariert.Warum hält Castle Windsor transiente Objekte fest?
Ich habe festgestellt, wenn ich einen expliziten Aufruf an IWindsorContainer.Release(hangingObject)
, dass es seine Referenzen fallen lassen.
Dies verursacht jedoch ein Problem, ich habe nicht erwartet, dass mit einem vorübergehenden Lifestyle-Objekt CastleWindsor eine Referenz behalten und effektiv ein Leck erstellen würde. Es wird eine eher banale und fehleranfällige Aufgabe sein, explizite Freigabeanrufe an allen geeigneten Stellen einzufügen.
Haben Sie dieses Problem gesehen, und haben Sie Vorschläge, wie Sie es umgehen können?