iT邦幫忙

0

C# .net Core 關於dbContext的應用

  • 分享至 

  • xImage

前言:
在.net Core中使用了大量的DI技巧,於IServiceCollection中註冊了DbContext讓ThreadPool可以統一管理DB的接口,於每個建構式中都可以注入一個DbContext Instance供該次Request使用(Life time為Scope),
最近幾年又流行了使用Task來非同步處理作業,增加CPU的使用效率。
小弟最近管理案子發現使用多執行續處理的部分開發人員為了避免DbContext Instance發生Race condition的情況,而會使用ConnectionString來實作一個Instance,但是常常會忘記做Dispose導致DB的IO端口被占滿,目前主要是要求於實作Instance時一定要配合使用using就可以解決這個問題。

問題:
請問如何可以從注入時就讓開發人員於多執行續調用DbContext不必考慮Race condition與Dispose的問題?

後言:
有考慮過自己實作一套DbContext的管理ThreadPool來處理,簡單的概念為於DbContext Excute時,先於ThreadPool紀錄該Thread Id,如果該Thread Id還未註冊於ThreadPool之中就提供一個DbContext Instance供其Excute,已經存在了即驗證該Instance是否已被Dispose...等等的後續處理。
想法很天真美好,路途一定坎坷難行,於是想在開始前先來請教各位先進、大神有沒有其他的解決方式或是看法。

天黑 iT邦研究生 5 級 ‧ 2023-08-07 11:00:22 檢舉
請教一下使用async 的效能很差嗎? 因為看起來您是建立很多task在執行的感覺.. 是做哪一類型的交易? 因為很多地方new 交易失敗的rollback 看起來也不好處理...
bodera iT邦新手 4 級 ‧ 2023-09-15 15:38:39 檢舉
async的效能很好,只是async是對單一Thread做執行處理。
例如我文中所述對於資料庫的應用方面,Async會讓Thread於發出Request至DB後釋出該Thread的資源供其他事件處理。
但是我開Task就可以發出兩個Request而且互相之間不會有影響,在兩個資料互相沒有相依的情況下可以更快速。
小弟尚菜有說錯的部分還請多多指教
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答