我正在建立一個網站使用asp.net mvc 5.asp.net mvc太多查詢一個頁面實體框架並行?
目前我使用依賴注入爲每個請求dbcontext注入我的控制器。
但EF不是線程安全的,因此一個dbcontext不能用於並行查詢。
是否值得對我的網站進行更改,以便本頁使用這樣的smt?
using(var ctx = new dbcontext) {
//creating a task query like tolistasync
}
using(var ctx2 = new dbcontext) {
//creating a task query like tolistasync
}
using(var ctx3 = new dbcontext) {
//creating a task query like tolistasync
}
.
.
.
.
.
.
.
using(var ctx20 = new dbcontext) {
//creating a task query like tolistasync
}
然後:
Task.WhenAll(t1,t2,t3,......,t20)
或者我應該只使用一個的DbContext每個請求,做財產以後這樣的:
var query1result = await query1.ToListAsync();
var query2result = await query2.ToListAsync();
var query3result = await query3.ToListAsync();
var query4result = await query4.ToListAsync();
.
.
.
.
.
var query19Result = await query19.ToListAsync();
var query20Result = await query20.ToListAsync();
在第一種情況下就不會有這麼多的開啓和關閉連接到數據庫。
在第二會有一個連接,但一切都發生順序
這種情況下,最好的,爲什麼?
如果你在'using'中封裝上下文,我不認爲它們中的任何一個都可以工作,因爲這將在異步任務完成之前關閉連接。 – DavidG
我知道我只是爲了澄清問題 – 1AmirJalali