Ostatnio zauważyłem, że moja aplikacja wydaje się jeść pamięć, która nigdy nie zostanie wydana. Po profilowaniu za pomocą CLRProfiler odkryłem, że kontener Castle Windsor, którego używam, trzyma się obiektów. Obiekty te są zadeklarowane za pomocą atrybutu lifestyle = "transient" w pliku konfiguracyjnym xml.Dlaczego Castle Windsor trzyma się obiektów przejściowych?
Znalazłem, jeśli jednoznaczne połączenie z IWindsorContainer.Release(hangingObject)
, że spadnie jego odniesienia.
Powoduje to jednak problem, nie spodziewałem się, że w przypadku przejściowego obiektu stylu życia CastleWindsor zachowa odniesienie i skutecznie stworzy wyciek. Będzie to raczej prozaiczne i podatne na błędy zadanie, które będzie polegało na wstawianiu wyraźnych wywołań Release we wszystkich odpowiednich miejscach.
Czy widziałeś ten problem i czy masz jakieś sugestie, jak go obejść?