2010-10-06 73 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