2010-01-03 34 views
0

我想請你幫忙,因爲我的做法並不好。在服務器端,有客戶端連接(每個客戶端由我的客戶端類表示)。每個客戶端需要與服務器後面的數據庫通信,同時還需要多個連接。多線程服務器和通信與SQL

我正在考慮擁有的SQLConnection和SQLReader的實例在每個客戶端實例,這肯定會工作,但我不知道是否有任何沒有更好的辦法。當然,表現是一切重要的。謝謝!

編輯:通常的流量爲約5請求/秒(開放連接是這樣常常是laggy)。最大用戶數不小於100

+0

是性能唯一重要的事情嗎?可維護性如何?您可能會考慮使用WCF來設置服務層,並根據需要讓服務打開連接。那麼你將不必擔心這個「每個客戶端的連接」問題。 – 2010-01-03 15:14:04

回答

0

更高的I典型地讓數據取方法作爲創建連接需要。我還沒有碰到這種情況不夠快的情況。不要忘記(至少在SqlConnection中)有一些內部連接池來提高性能。這種方法將有效地消除維護每個客戶端的數據對象的需要等等。

簡單的例子:

private static IEnumerable<SomeType> GetSomeData(string someInput) 
{ 
    IEnumerable<SomeType> result = null; 
    using (SqlConnection conn = new SqlConnection(GetConnectionString())) 
    { 
     // put whatever code is needed to populate the result here 
    } 
    return result; 
} 

你也可以考慮使用Linq-to-SQL,這可能會導致非常簡單,高性能的數據訪問代碼。

+0

謝謝......但如果更多的線程運行此方法,如果它是靜態的呢?上例中的線程安全性如何? – Thomas 2010-01-03 16:20:07

+0

@Tomas:因爲上面的例子沒有使用任何共享資源(除了數據庫,它的代碼不在我們的控制範圍之內),這裏沒有真正的線程問題。對該方法的每次調用都將在其自己的'SqlConnection'對象,其自己的'result'變量等上進行操作。 – 2010-01-03 23:29:16

0

我想到的是這樣一個連接池。我們只需創建有限數量的Connection對象並在客戶端之間共享它們。由於每個客戶都沒有使用連接,所以我認爲這是可能的。