我一直在看一個當然筆者提到這裏,如果你有一些IQueryable的,說:迭代的IQueryable用foreach與調用ToList(),然後做的forEach - 性能
var someQuery = dbContext.Table.Where(x => x.Name == "Mark");
,然後嘗試使用forEach
迭代someQuery
的結果,它會保持數據庫連接處於打開狀態,直到整個forEach
結束,並且很多初學者開發者犯了這個錯誤,並且在forEach
中執行了大量邏輯。相反,她建議只在前臺調用toList()
,然後在內存中收集forEach
。
雖然我找不到任何參考,但實體框架會保持數據庫處於打開狀態,直到forEach
循環停止。我如何評估這是否真正的性能?
我已經[發現了困難的方式](http://stackoverflow.com/a/22530381/261050) – Maarten
是的,它會保持連接打開,直到它遇到.toList() –
連接保持打開,直到枚舉'IQueryable'完成。這會發生在'foreach'循環結尾或調用'.ToList()'時。然而,不清楚的是,以這種或那種方式進行這種表演會有性能損失。確保數據庫連接長時間保持打開狀態肯定存在問題 - 您通常希望儘快釋放連接。 – Enigmativity