您好,我正在开发一个使用 Enterprice Libraries 的 Unity 容器解决问题的项目 异常处理、缓存、日志记录和数据库访问的依赖项,但我们不断将大量泄漏的对象存入内存。
我们像这样使用属性注入(inject):
[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.WrapHandlerDataMicrosoft.Practices.EnterpriseLibrary.Common.Configuration.GenericEnumeratorWrapper
Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheStorageData
关于使用 Unity 处理依赖项以避免对象泄漏的一般建议?
最佳答案
您列出的所有对象都是配置系统的一部分。你如何初始化你的容器?只是调用“AddNewExtension()”?如果是这样,那不是真正的泄漏,因为这些对象代表您加载的配置。配置源(保存在这些对象上的内容)在应用的整个生命周期内一直存在,以便它可以监视并通知您应用中的更改。
您运行的哪些工具告诉您它们正在泄漏?泄漏是在增加还是持续不断?一些细节将有助于将行为从“预期”缩小到“糟糕的实际错误”。
此外,这更像是一个企业库问题,而不是一个 Unity 问题 - 据我所知,Unity 本身并没有泄漏。
关于c# - Unity 容器内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3877573/