最新的方法說明了向MVC \ WebAPI控制器注入實例權限DbContext
。它有一些專業人士,但我有一個問題還沒有回答 - 性能的DbContext
實例創建將不會被使用。ASP.NET DbContext實例注入但未使用 - 性能問題與否?
根據這個問題:What happens when i instantiate a class derived from EF DbContext?DbContext
創建並不是那麼便宜的操作(包括內存和CPU)。而且這兩次糟糕的時候:
- 你的行動並不需要的DbContext在所有的(所以你有使用和不使用DB混合行動)
- 一些邏輯(如條件)不允許訪問
DbContext
(eqModelState.IsValid
)。因此,動作將返回結果BEFORE訪問DbContext
實例。
所以在這兩個(一個也許另一些情況下)DI創建DbContext
的範圍的情況下,它浪費資源,然後就收集它在請求結束。
我沒有做任何性能測試,只是搜索了一些文章的第一。我不認爲這將是100%的表現缺乏。我只是想:「嘿人,你爲什麼創建了對象的實例,如果我根本不使用它的話」。
你有哪個版本的EF? EF核心具有這種新的功能上下文池。 –
@GertArnold它是核心。我遇到了池註冊和遷移組合問題。你的意思是說,dbcontext池的用法擺脫了DbContext實例嗎?我認爲資源仍然會被浪費(但並不經常是這樣)還有更重要的問題即將到來 - dbcontext生存期(緩存,更改跟蹤等) – Sergey
在EF6中,上下文創建被明確設計爲輕量級操作。所以我不明白爲什麼在ef-core中引入了上下文池。坦率地說,這讓我對ef-core中上下文創建的成本有點懷疑。我只是在文檔下面留下了一個關於這個問題的問題。但無論如何,我不會爲此擔心。設計你的控制器,使它們不包含既需要也不需要上下文的方法。在有切實原因時優化這些內容。 –