2010-11-03 64 views
1

我有100個這樣的方法,並且每個方法被調用超過一千次。 這裏每次調用都會創建一個新的SqlConnection)(從池中獲取)。儘管這些方法很小,並且立即進行控制,並且SqlConnection應該由GC收集。在退出方法之前顯式關閉SqlConnection是否有用

Method() 
{ 
    MyComponent adapter = new MyComponent(); 
    adapter.Connection = GetConnection(dbContext);//Here I get new SqlConnection 
    adapter.Update(_SqlTable); 

} //方法結束

我的問題是 - 請問下面的優化有什麼差別?

Method(){ 
     MyComponent adapter = new MyComponent(); 
     adapter.Connection = GetConnection(dbContext);//Here I get new SqlConnection 
     adapter.Update(_SqlTable); 
     adapter.Connection.Close() // Or Dispose() 
    } //End of Method 

有沒有更好的方式來寫這些方法(例如讓他們靜靜態方法)

回答

5

是的,你絕對應該關閉,而不是僅僅讓它得到敲定的連接。你正在嘗試編寫自己的連接池嗎?如果是這樣,請勿 - 框架自動提供。只需創建一個新的SqlConnection,它將從池中獲取底層連接。

您應該使用using語句,以確保連接配置無論發生什麼情況:

using (SqlConnection connection = GetConnection(dbContext)) 
{ 
    MyComponent adapter = new MyComponent(connection); 
    adapter.Update(_SqlTable); 
} 

您應該記錄這MyComponent採取在這種情況下連接的生存責任。另一種方法是使MyComponent實施IDisposable,通過它在構造函數中的數據上下文,以及該配置:

using (MyComponent adapter = new MyComponent(dbContext)) 
{ 
    adapter.Update(_SqlTable); 
} 

很難不知道什麼MyComponent確實給多少進一步的設計建議。

+0

感謝喬恩,我沒有使用我自己的連接池。它是默認的服務器池。不幸的是,我的組件是一個自動生成的數據集適配器,它不會覆蓋System.ComponentModel.Component的Dispose()。所以我必須處理與「使用」的連接。 – Panks 2010-11-08 06:17:28

相關問題