Autofact Memory Leak Experiment
前言 現在有很多系統除非太小,不然應該都會使用第三方開發的 DI 容器,來實現 IoC。但是使用 DI 容器時免不了要對於物件的生命週期有一定的了解,不然到時候出現相關的問題就手忙腳亂了。因此這一篇文章就記錄了我使用 Autofac 時,遇到的 memory leak 的問題,並把所做的實驗記錄下來。 實驗的情境主要是 run 在 console 環境中,模擬類似 windows service 的情境,所以 web 的 ASP.Net 環境並不在此實驗的考慮範圍內。 這篇文章使用的原始碼連結如下(已更新專案為 .NET 5): GitHub repo url 內文 物件的生命週期與最初註冊物件的依賴是怎樣的方式,預設是 InstancePerDependency 這個方法,它會確保你每次呼叫 Resolve 方法時可以取得新的物件,並不會與其他呼叫端使用同一份實體。這個特性在大多數的時候都會符合需求。 因此在注入時我們先這樣寫: ps.快照時間基本上都是10秒30秒各拍一次,執行超過50秒就結束實驗。 實驗一 1 2 3 4 5 6 7 8 9 10 public class DAModules : Autofac.Module { protected override void Load(ContainerBuilder builder) { var assembly = Assembly.Load("NineYi.ERP.DA.ERPDB"); builder.RegisterType<deamonresourcerepository>() .As<ideamonresourcerepository>() .InstancePerDependency(); } } 接下來就是我們這次的實驗目標的寫法: ...