私は既存のアプリケーションに取り組んでいます。このアプリケーションは、巨大なファイルからデータを読み取り、いくつかの計算を行った後、そのデータを別のテーブルに格納します。
しかし、これを行うループ (以下を参照) には非常に長い時間がかかります。ファイルには数千のレコードが含まれることがあるため、プロセス全体に数日かかります。
foreach
このループを別のものに置き換えることはできますか? 使っParallel.ForEach
てみましたが助かりました。私はこれに慣れていないので、あなたの助けに感謝します。
foreach (record someredord Somereport.r)
{
try
{
using (var command = new SqlCommand("[procname]", sqlConn))
{
command.CommandTimeout = 0;
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(…);
IAsyncResult result = command.BeginExecuteReader();
while (!result.IsCompleted)
{
System.Threading.Thread.Sleep(10);
}
command.EndExecuteReader(result);
}
}
catch (Exception e)
{
…
}
}
回答を確認した後、非同期を削除し、以下のようにコードを編集して使用しました。しかし、これはパフォーマンスを向上させませんでした。
using (command = new SqlCommand("[sp]", sqlConn))
{
command.CommandTimeout = 0;
command.CommandType = CommandType.StoredProcedure;
foreach (record someRecord in someReport.)
{
command.Parameters.Clear();
command.Parameters.Add(....)
command.Prepare();
using (dr = command.ExecuteReader())
{
while (dr.Read())
{
if ()
{
}
else if ()
{
}
}
}
}
}