2012-02-01 49 views
1

我有一個WCF web服務,可以滿足來自不同客戶端的同時請求。該服務必須與每個請求上的MySQL Db進行通信。我面臨的問題是大量的請求同時進入(大約300-400),並與MySQL進行通信「無法連接到任何指定的MySQL主機」彈出。 我到目前爲止的想法是,Mysql無法管理如此多的同時連接,並且無法再迎合並開始拋出錯誤。解決此問題的最佳方法是什麼? 以下是被稱爲每次請求到來時的代碼片段:同時連接MySql/C#

 try 
     { 
      MySqlCommand command = new MySqlCommand(query); 
      command.Connection = conn; 
      conn.Open(); 
      long id = -1; 
      int _result = command.ExecuteNonQuery(); 

      if (_result == 1) 
      { 
       //do something 
      } 

      conn.Close(); 
      return id; 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     finally 
     { 
      if (conn.State != ConnectionState.Closed) 
      { 
       conn.Close(); 
      } 
     } 
+0

永遠不要寫'throw ex;'。你應該用'using'語句替換整個'try'塊。 – SLaks 2012-02-01 20:07:13

+0

在catch塊中什麼都不做,除了最多寫一個事件日誌。即使不在捕獲塊中這樣做。只需將異常的詳細信息複製到某處,然後在事務外寫入該事件日誌。不要丟。 – 2012-02-01 20:12:12

+0

購買昂貴的MS-SQL-Server許可證並幫助蓋茨基金會 – 2012-02-01 20:22:09

回答

2

多久「//做什麼」走?如果它很短,我看不到很多你可以通過 加速代碼。如果時間長了,考慮在做任何事情之前關閉連接(可能是錯誤處理)。

(作爲一個方面說明,你應該嘗試using語句代替try/catch塊關閉連接)

編輯:此外,作爲SLaks說,「拋」;會做同樣的事情「扔掉」;除了它會保留堆棧跟蹤,這就是爲什麼你不應該有「前」;在那裏,但這一點是模擬,如果你用它來替換它。