簡體   English   中英

DbContext是一項昂貴的操作嗎?

[英]Is DbContext an expensive operation?

在C#MVC EF框架中,我看到很多例子只需要在需要插入或查詢時創建一個新的DbContext ,然后關閉/釋放它(許多人使用“using”進行自動關閉/釋放)。

對此進行了一些搜索但是找不到一個好的答案,但是創建一個非常便宜且快速的DbContext操作?

例如,考慮一個典型的MVC應用程序,在頁面上它有許多“組件”,例如標題,邊欄,主要內容等,並且在非平凡的設置中,每個組件都有自己獨立的邏輯和代碼 - 我想在每個組件中創建一個新的DbContext嗎? (如果是,系統會自動緩存查詢結果嗎? - 例如,一個常見的用例是,在每個組件中,它需要在數據庫中查詢當前站點范圍的設置,這是同一行中的表)。

如“ 實體框架4,5和6的性能考慮 ”第9.3節(強調我的)所述:

實體框架的上下文旨在用作短期實例,以提供最佳的性能體驗。 預期上下文將是短暫的並且被丟棄 ,因此已經實現了非常輕量級並且盡可能地重新使用元數據。 在Web方案中,重要的是要記住這一點,並且不要有超過單個請求持續時間的上下文。 同樣,在非Web方案中,應根據您對實體框架中不同級別的緩存的理解來丟棄上下文。 一般來說,應該避免在應用程序的整個生命周期中使用上下文實例,以及每個線程和靜態上下文的上下文

您可以使用注入,例如通過Unity,這將允許在請求進入時創建單個DbContext實例並將其注入需要的位置。 使用Unity,我相信您可以指定是為每個請求創建單個實例,還是每次都創建一個新實例。

在任何需要的地方創建DbContext並不是很慢,但這有一點常識,所以如果可以的話,重用已有的,如果你專注於與數據庫查詢相關的性能,那么總會有一個使用任何ORM的開銷。 這是一個方便的權衡。

我還建議使用像Glimpse這樣的東西,它允許您查看用於呈現頁面的所有查詢和連接,包括ajax查詢,並為您提供有關正在發生的事情的精彩概述。 有時可能有點嚇人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM