Dlaczego Castle Windsor trzyma obiekty przejściowe?
Ostatnio zauważyłem, że moja aplikacja wydaje się jeść pamięć, która nigdy nie zostanie wydana. Po profilowaniu za pomocą Clrprofilera odkryłem, że kontener Castle Windsor, którego używam, trzyma przedmioty. Obiekty te są deklarowane atrybutem lifestyle="transient" w config xml.
Odkryłem, że jeśli umieszczę jawne wywołanie na IWindsorContainer.Release(hangingObject)
, zniknie ono z referencji.
Czy widziałeś ten problem i masz jakieś sugestie, jak go obejść?
3 answers
Myślę, że odpowiedzi tutaj brakuje istotnego punktu - że to zachowanie jest konfigurowalne po wyjęciu z pudełka za pomocą zasad wydania-sprawdź dokumentację na stronie projektu castle Tutaj .
W wielu scenariuszach, zwłaszcza tam, gdzie twój kontener istnieje przez cały okres użytkowania aplikacji hostingowej i gdzie tymczasowe komponenty naprawdę nie muszą być śledzone (ponieważ zajmujesz się usuwaniem w kodzie wywołującym lub komponencie, który został wstrzyknięty w Usługę), wtedy można po prostu ustawić politykę wydania na implementację NoTrackingReleasePolicy
i z nią skończyć.
Przed Castle v 1.0 wierzę, że zostaną zaimplementowane / wprowadzone obciążenia komponentów - co pomoże złagodzić niektóre z tych problemów, a także pozbyć się wstrzykiwanych zależności itp.
Edit:
Sprawdź następujące posty, aby uzyskać więcej dyskusji na temat obciążenia komponentów.
Obciążenie Składowe-Davy Brions
Również obciążenie komponentu jest zaimplementowane w oficjalne wydanie 2.0 kontenera Windsor.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-11 07:33:15
Należy zauważyć, że wygląda na to, że zostało to naprawione w bagażniku Zamku. W r5475 Hammett zmienił domyślną politykę wydań w Mikrokernelu na LifecycledComponentsReleasePolicy
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-11 07:33:36
Możesz ustawić tryb życia Singletona lub transienta na obiektach w kontenerze. Singleton obiekty, które Rozumiem powinny trwać całe życie aplikacji, ale nie rozumiem przydatności tego behvaviour jest taki sam dla przejściowych!
Niestandardowe style życia mogą być tworzone poprzez implementację ILifestyleManager
. Być może jest to możliwe, aby wdrożyć to odpowiednio do stworzenia typu ReallyTransient
lifestyle!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-11 07:34:01