→ ssccg: 用Entity framework就不要去管connection什麼時候開關的 09/11 12:55
→ ssccg: 而且基本上底層的Data Provider都有做connection pool 09/11 13:02
→ ssccg: 連接字串沒變的話不用去想什麼開關問題 09/11 13:02
為什麼不用去想呢..你的意思是他會幫我妥善處理?
使用不同的model也只會開關一次,是這樣嗎?
因為我寫的系統很雜,所以一個功能開5~6次不同table,
做不同處理是很平常的,我很怕她會我用一個他就開關一次,
這樣效率會非常非常差
→ alog: 就去測試跟驗證 09/11 15:28
→ alog: 沒有數據是沒辦法認定效率非常差的 09/11 15:28
→ alog: 舉個例子,像以前大家都認為 Java 還是動態語言在解決某種 09/11 15:29
→ alog: 問題的時候效率非常差,而且都拿C語言比較 09/11 15:29
→ alog: 事實上在某種狀況下比C/C++還快 09/11 15:29
→ alog: 請不要用自己的思考去先入為主,建議多做實際測試 09/11 15:31
→ alog: 像Javascript v8的RegExp就比C跟golang的RegExp庫還快很多 09/11 15:31
→ alog: 這沒測試過還真不曉得說,原來技術進步這麼快 09/11 15:32
你可能誤會我的意思了,舉個例子來說我要兩個table1和table2的資料
那我會
連線.open();
table1.取得資料();
table2.取得資料();
連線.close();
這是比較直覺得作法對吧?
你應該不會希望是下面這種,
連線.open();
table1.取得資料();
連線.close();
連線.open();
table2.取得資料();
連線.close();
我並不是在說EF效率差,而是我想了解一下他運作情況是怎樣的,
1F給的解釋,可以理解為不會有這個問題,不過我想在清楚一點了解 謝謝
→ ssccg: 在同樣的connection string下,conn.Open()是從pool取連線 09/11 16:24
→ ssccg: conn.Close()是把連線放回pool,不是真的開關 09/11 16:24
→ ssccg: 只有pool沒有已開啟且可使用的連線時才會開新的 09/11 16:25
→ ssccg: 你寫段程式去試 new SqlConnection, open, close 很多次就 09/11 16:27
→ ssccg: 知道了,第一次很長,後面再開關幾乎不花時間 09/11 16:31
非常感謝!!!!
→ ssccg: 如果你有別的理由要控制connection開關,要EF6 09/11 16:51
現在這樣應該就行了,早上在公司測了一下,自己寫的connection,不是用EF
迴圈一萬次抓同一筆資料,要1X秒(內網)這樣應該沒甚麼問題..
推 chatnoir: EF在selct基本上是沒問題的,比較麻煩是update&insert 09/13 22:54
可是上面的版友說他不是真的斷開連結,還是說只有select沒斷開?
update和 insert是有段開的? 這樣就麻煩了..
※ 編輯: BigLoser (113.61.164.195), 09/14/2014 14:30:37
→ winsummer: 你可以用Dependency Injection 09/27 13:09
→ winsummer: nuget上有很多 injection/IoC 容器去幫你管理生命週期 09/27 13:10
→ winsummer: DbContext 通常會跟http request 同生共死 09/27 13:11