您好我正在开发一个使用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的依赖关系以避免对象泄漏的任何一般建议吗?
答案 0 :(得分:2)
您列出的所有对象都是配置系统的一部分。你是如何初始化容器的?只是调用“AddNewExtension()?”如果是这样,它实际上不是泄漏,因为这些对象代表您加载的配置。配置源(持有这些对象的内容)会在应用程序的生命周期内保持不变,以便它可以监视并通知您应用程序中的更改。
你在运行哪些工具告诉你它们正在泄漏?泄漏是增长还是不变?一些细节将有助于将行为从“预期”缩小到“哎呀真正的bug”。
此外,这更像是企业库问题而不是Unity问题 - Unity本身并没有泄露我所知道的问题。
答案 1 :(得分:-3)
您是否正确处理了数据库实例?例如(使用db = new Database()){....}?