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