2017-01-24 71 views
0

我想優化我的wep應用程序中的sql連接,在.net mvc中創建4,我讀到ado.net自動管理連接池,如何在Application_Start類中創建一個具有連接的全局對象,然後通過應用程序中的所有數據對象傳遞連接對象?像這樣的東西在asp.net-mvc-4應用程序中使用ADO.Net SQL池

protected void Application_Start() 
{ 
... 
SqlConnection conn = new SqlConnection("Connection String..."); 
DAOPeople daoPeople = new DAOPeople(conn); 
... 
} 

這樣我避免了爲每個dao創建一個新的SqlConnection,是正確的嗎?

+1

不是。僅在需要時纔在方法中創建(並關閉)連接。 –

回答

3

不,不這樣做。您的連接對象會遇到瓶頸,因爲單個連接會在所有會話和請求之間共享給您的應用。

對於連接池,您可以做相反的操作:不要嘗試共享或重新使用單個連接對象; 只需創建一個SqlConnection每當你需要它,當場打開它,並確保它通過using塊完成後立即處置。即使您的代碼看起來像打開和關閉很多連接,連接池功能內置於,並確保您繼續從同一池中的少量現有連接進行繪製。

這就是說,如果你真的在真的大網站,你可以做得更好一點。大型網站做的一件事是幫助擴展,以避免不必要的內存分配,並且有一些內存會隨着創建一個SqlConnection對象。例如,他們可能每個HTTP請求都有一個主要的SqlConnection,並且可能會啓用MARS或者在請求中有一個附加的輔助連接對象,以便它們可以異步運行某些內容。但這只是0.1%最高需要關注的事情,如果您處於這個級別,則需要測量以找出適合您的特定站點和負載的適當平衡點。