2010-10-06 134 views
2

您好我正在使用Enterprice库的Unity容器解决异常处理,缓存,日志记录和数据库访问的 依赖项目,但我们不断收到大量泄漏对象到内存中。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.Co nfiguration.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处理依赖关系以避免对象泄漏的一般建议?

+2

你如何确认内存泄漏?你能否在“泄漏”之前和之后发布更多显示你的记忆力的统计数据? Unity中需要注意的一点是,默认情况下,对象不会从容器中丢弃,直到容器被丢弃。这是SingeltonLifetimeManager行为。如果你想控制你的对象的生命周期,你将不得不起诉一个不同的终生管理者。 – 2010-10-06 23:14:33

回答

2

您列出的所有对象都是配置系统的一部分。你如何初始化你的容器?只需调用“AddNewExtension()?”如果是这样,它不是一个泄漏,因为这些对象表示您加载的配置。配置源(这是持有这些对象的东西)在应用程序的整个生命周期中保持不变,以便它可以监视并通知您应用程序中的更改。

你跑哪些工具告诉你他们在泄漏?泄漏是不断增长的还是不变的?一些细节将有助于缩小从“预期”到“哎呦真实错误”的行为。

此外,这是一个比Unity更多的企业库问题 - Unity本身并不泄露,我知道。

+0

因此,如果我多次初始化容器,每次初始化的配置对象都会留在整个应用程序的生命周期中? – zad 2010-10-07 15:34:07

+0

你的贡献很大。 – zad 2010-10-07 16:02:04

+1

基本上是的。有一些技巧可以用来缓解这一点。例如,创建一个容器并在其中初始化Entlib,然后为其他所有内容使用子容器。然后删除并重新初始化子容器。这将阻止重新加载Entlib配置的东西。您也可以尝试显式创建ConfigurationSource对象,使用它配置容器,然后在配置容器后进行配置。但不确定它会起作用或有所帮助。 – 2010-10-07 20:04:32

-3

你是否正确地部署了数据库实例?例如(使用db = new Database()){....}?

+0

数据库不是一次性的。 – 2010-10-07 05:11:59

+0

这忽略了企业图书馆的重点。 EL为你管理像db这样的依赖关系。你告诉它你想要一个你的类的实例,它给你一个满足依赖的实例。当你处理你的课时,它会处理依赖关系的处置。 – 2011-07-18 12:54:47