利用session測試ADO.NET連接池性能
學(xué)習(xí)ADO.NET連接池時,你可能會遇到性能問題:一個有近200個子單據(jù)的單據(jù),提交時會非常慢,甚至?xí)霈F(xiàn)超出最大進(jìn)程數(shù)這樣的錯誤。查看代碼,發(fā)覺對每個子單據(jù)都啟動了流程,都要單獨(dú)獲取session與DB交互。查看DB中的session連接數(shù),發(fā)覺每提交單據(jù),session都會多達(dá)250+...。這里就把我的想法分享給大家。
想法:當(dāng)時第一感覺就是認(rèn)為問題應(yīng)該是在這里,就有了這樣的想法:改變每個單據(jù)都占用session,而共享一個session來與DB交互,以提高應(yīng)用的性能。初步設(shè)定與DB得交互次數(shù)在150左右。想法驗(yàn)證
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();
- }
獨(dú)占一個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#多次測試的平均結(jié)果:獨(dú)占session的:718.75ms,建立數(shù)據(jù)庫連接次數(shù):151共享session的:781.25ms,建立數(shù)據(jù)庫連接次數(shù):1這個結(jié)果確實(shí)讓我很吃驚,但足以證明了ADO.NET連接池做的是相當(dāng)出色的。個人認(rèn)為:共享的慢就慢在了采用了Transaction...。希望通過這個測試會讓大家對連接池的性能認(rèn)識有所提高。


















