如果我IServiceScopeFactory.CreateScope()從已經添加為范圍 using 的服務呼叫會發生什么services.AddScoped?當我呼叫時,它是否會創建一個新的范圍,然后是每個請求的范圍服務的新實體scope.ServiceProvider.GetRequiredService?
幕后故事:
我從另一個開發人員那里得到了一個遺留專案,現在我正在嘗試識別和解決幾個錯誤。首先,在使用物體框架時,我有一些看起來像資料庫連接泄漏的東西。我在高負載下看到此錯誤:
Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
問題是,有一些范圍服務會創建一個新范圍并請求一個 DatabaseContext,它在 EF 中是默認范圍的。
uj5u.com熱心網友回復:
IServiceScopeFactory.CreateScope將創建一個完全獨立于任何當前范圍的新范圍。如果您從新范圍決議范圍服務,它將回傳該服務的新實體。
當您處于該范圍時,應決議該范圍創建的Dispose所有服務。IDisposable如果您正在泄漏作用域服務實體,那么值得檢查每個IServiceScope創建的服務實體是否也被處理掉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/422423.html
標籤:
