Утечки памяти контейнера Unity - PullRequest
2 голосов
/ 07 октября 2010

Привет, я работаю над проектом, в котором для решения проблемы используется контейнер Unity для библиотек пользователя. зависимости для обработки исключений, кэширования, ведения журналов и доступа к БД, но мы продолжаем получать много утечек объектов в память.

Мы используем внедрение свойств следующим образом:

[Dependency]
public Database DB
{
  get { return db; }
  set { db = value; }
}
[Dependency]
public ExceptionManager ExceptionMgr
{
  get { return exceptionManager; }
  set { exceptionManager = value; }
}

Часть объекта просочилась:

Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSetti Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionPolicyData
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ReplaceHandlerData
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.WrapHandlerData Microsoft.Practices.EnterpriseLibrary.Common.Configuration.GenericEnumeratorWrapper Microsoft.Practices.EnterpriseLibrary.Caching. Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheStorageData

Есть ли общие рекомендации по работе с зависимостями в Unity, чтобы избежать утечек объектов?

Ответы [ 2 ]

2 голосов
/ 07 октября 2010

Все перечисленные вами объекты являются частью системы конфигурации.Как вы инициализируете свой контейнер?Просто вызываю "AddNewExtension ()?"Если это так, то на самом деле это не утечка, поскольку эти объекты представляют загруженную вами конфигурацию.Источник конфигурации (то есть то, что удерживает эти объекты) остается в течение всего срока службы приложения, чтобы он мог отслеживать и уведомлять вас об изменениях в вашем приложении.

Какие инструменты вы используете для этогоговорят вам, что они протекают?И утечки растут, или постоянны?Некоторые подробности помогут сузить поведение от «ожидаемого» до «фактического сообщения об ошибке».

Кроме того, это скорее вопрос корпоративной библиотеки, чем вопроса Unity - само Unity не утечка, о которой я знаю.

0 голосов
/ 07 октября 2010

Правильно ли вы используете экземпляр базы данных?Как, например, (используя db = new Database ()) {....}?

...