2013-01-16 70 views
0

我們的遺留Web服務中正在使用以下Web方法。使用asmx Web服務處理大型數組

[WebMethod(Description = "Get Bulk Data")] 
public string[] getBulkData(string[] arrInput) 
{ 
    string[] arrResults = new string[arrInput.Length]; 
    using(SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["mydb"].ToString())) 
    { 
     conn.Open(); 
     //some db operations... 
     for (int arrIndex = 0; arrIndex < arrInput.Length; arrIndex++) //arrInput size can be very large 
     { 
      arrResults[arrIndex] = getResult(); 
     } 
    } 
    return arrResults;    
} 
private string getResult() 
{ 
    string r; 
    using (SqlConnection thisConn = new SqlConnection(ConfigurationManager.ConnectionStrings["mydb2"].ToString())) 
    { 
     //some db operations 
     //assign values to r 
    } 
    return r; 
} 

Web方法,getBulkData,需要串的陣列,查詢DATABSE並返回與相同大小的結果的數組。結果來自私人方法,getResult()也將查詢數據庫。

我不確定這是否是正確的實現,但我傾向於說這不是,因爲有多個查詢數據庫,這可能會影響getBulkData的性能。顯然,該陣列中的元素越多,處理時間就越長。

如果我在getBulkData()中創建thisConn對象,並將其傳遞給getResult,那麼在提高性能方面會有什麼不同?在這種情況下處理大數組的最佳方式是什麼?

非常感謝。

回答

0

數據庫事務處理需要時間。如果您在循環中查詢數百或數千個數據庫,您的性能肯定會受到影響。如果可能,請嘗試修改GetResult方法以僅觸發一次,但將結果保存在IEnumerable類型的屬性中。這將所有記錄放入計算機內存中,並允許您使用LINQ運行查詢。使用這種方法你會看到性能顯着提高。你可以看到一個例子here

+0

感謝您的意見。 – woodykiddy