嗨,我正在使用Enterprice Libraries的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.Configuration.CacheManagerData Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings
Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheStorageData
关于使用Unity处理依赖项以避免对象泄漏的任何一般性建议?
最佳答案
您列出的所有对象都是配置系统的一部分。您如何初始化容器?只是调用“ AddNewExtension()?”如果是这样,那实际上不是泄漏,因为这些对象代表您加载的配置。配置源(保留在那些对象上的资源)在应用程序的生命周期内一直存在,因此它可以监视并通知您应用程序中的更改。
您正在运行的哪些工具正在告诉您它们正在泄漏?泄漏在增加还是持续不断?一些细节将有助于缩小行为的范围,从“预期”缩小为“消除实际错误”。
而且,这比Unity问题更是一个企业库问题-我知道Unity本身不会泄漏。