利用session測試ADO.NET連接池性能
學習ADO.NET連接池時,你可能會遇到性能問題:一個有近200個子單據的單據,提交時會非常慢,甚至會出現超出最大進程數這樣的錯誤。查看代碼,發覺對每個子單據都啟動了流程,都要單獨獲取session與DB交互。查看DB中的session連接數,發覺每提交單據,session都會多達250+...。這里就把我的想法分享給大家。
想法:當時第一感覺就是認為問題應該是在這里,就有了這樣的想法:改變每個單據都占用session,而共享一個session來與DB交互,以提高應用的性能。初步設定與DB得交互次數在150左右。想法驗證
ADO.NET連接池共享一個session的測試
- try
- {
- conn.Open();
- connCount++;
- trans=conn.BeginTransaction();
- for(inti=0;i<50;i++)
- {
- stringrandom=rdm.Next().ToString();
- Insert(string.Format(insertSql1,"姓名"+random),trans);
- Insert(string.Format(insertSql2,"城市"+random),trans);
- Update(string.Format(updateSql,random),trans);
- }
- dt=Query(string.Format(querySql,rdm.Next(1,500)),trans);
- trans.Commit();
- }
- catch(Exceptionex)
- {
- if(null!=trans)
- trans.Rollback();
- Sav2File("TestConnectionWithOneexception:"+ex.Message);
- }
- finally
- {
- if(null!=conn)
- conn.Close();
- }
獨占一個session的測試(每個方法里包含了獲取session和釋放session的操作)
- for(inti=0;i<50;i++)
- {
- stringrandom=rdm.Next().ToString();
- Insert(string.Format(insertSql1,"姓名"+random));
- Insert(string.Format(insertSql2,"城市"+random));
- Update(string.Format(updateSql,random));
- }
- DataTabledt=Query(string.Format(querySql,rdm.Next(1,500)));
#T#多次測試的平均結果:獨占session的:718.75ms,建立數據庫連接次數:151共享session的:781.25ms,建立數據庫連接次數:1這個結果確實讓我很吃驚,但足以證明了ADO.NET連接池做的是相當出色的。個人認為:共享的慢就慢在了采用了Transaction...。希望通過這個測試會讓大家對連接池的性能認識有所提高。