Почему Замок Виндзор держится на временных объектах?

Недавно я заметил, что мое приложение ест память, которая никогда не выпускается. После профилирования с помощью CLRProfiler I 'мы обнаружили, что контейнер Виндзорский замок I 'м используя держится за объекты. Эти объекты объявлены с образом жизни = "переходная» атрибут в конфиге xml.I '

нашел, если я положил явный вызовIWindsorContainer.Release(hangingObject), что он бросит свои ссылки.

Это вызывает проблемы, хотя, я неОжидая, что с временным объектом образа жизни CastleWindsor сохранит ссылку и эффективно создаст утечку. Это'Это будет довольно обыденная и подверженная ошибкам задача, заключающаяся во вставке явных вызовов Release во всех соответствующих местах.

Вы видели эту проблему, и есть ли у вас какие-либо предложения о том, как ее обойти?

Ответы на вопрос(3)

что это было исправлено в Сундуке Замка. В r5475 Хамметт изменил политику выпуска по умолчанию в MicroKernel на.LifecycledComponentsReleasePolicy

Решение Вопроса

что ответы здесь упускают важный момент - что это поведение настраивается "из коробки" с помощью политик релиза - ознакомьтесь с документацией на сайте проекта замка.Вот.

Во многих сценариях, особенно когда ваш контейнер существует в течение всего срока службы хост-приложения и где временные компоненты действительно не работаютне нужно отслеживать (потому что выперерабатывает удаление в вашем вызывающем коде или компоненте, который 'был введен в службу), тогда вы можете просто установить политику выпускаNoTrackingReleasePolicy реализация и покончим с этим.

До версии Castle v 1.0 я полагаю, что компонентное бремя будет внедрено / внедрено, что также поможет решить некоторые из этих проблем, связанных с избавлением от введенных зависимостей и т. Д.

Редактировать:

Проверьте следующие посты для более подробного обсуждения бремени компонентов.

Компонентное бремя - Дэви Брионс

Также компонентная нагрузка реализована вофициальный релиз 2.0 Виндзорского Контейнера.

хотя на объектах в контейнере. Единственные объекты, которые я понимаю, должны работать в течение всего срока службы приложения, но я неЯ не понимаю, насколько полезен этот бехавиор для преходящих!

Пользовательские образы жизни могут быть созданы путем реализацииILifestyleManager, Может быть это'Можно реализовать это соответствующим образом, чтобы создатьReallyTransient тип образа жизни!

Ваш ответ на вопрос