従来のWebサービスで使用されている次の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
、文字列の配列を受け取り、データベースにクエリを実行して、同じサイズの結果の配列を返します。getResult()
結果は、データベースにもクエリを実行するプライベートメソッドから取得されます。
ここでそれが正しい実装であるかどうかはわかりませんが、getBulkDataのパフォーマンスに影響を与える可能性のある複数のクエリデータベースがあるため、そうではないと言う傾向があります。どうやら、その配列に含まれる要素が多いほど、処理に時間がかかります。
getBulkData()でthisConnオブジェクトを作成し、それをgetResultに渡すと、パフォーマンスの向上という点で違いはありますか?そして、この場合、大きな配列を処理するための最良の方法は何でしょうか?
どうもありがとう。