レコードの挿入(挿入)をテーブルに分割して、それほど遅くならないようにする必要があるシナリオがあります。現在、挿入するレコードは81K行あり、先日、現在のプロセスを使用すると約4時間かかりました-完了まで5時間。スレッドプロセスを強化するか、挿入をバッチに分割して、たとえば 20 (81,000/20) で分割し、for ループを使用して毎回 4k 行を処理したかったのです。どれが一番のおすすめでしょう。
これは現在私のコードです:
iProcs = 81000/20;
Thread[] threads = new Thread[iProcs]
for (int i = 0; i < iProcs; i++)
{
//range of values to get
iStart = iRange * i;
if (i == iProcs - 1) //for last processor use the rest of the list
iEnd = packageList.Count - iStart;
else
iEnd = iRange;
var listSubset = packageList.GetRange(iStart, iEnd).ToList();
Thread myThread = new Thread(
delegate()
{
service.PostToClient(listSubset);
}
);
myThread.Start();
threads[i] = myThread;
}
// all threads should complete before we continue with main.
foreach (Thread thread in threads) { thread.Join(); }
上記のコードはかなり遅いです。これがより効率的であるかどうかを以下でテストしていません。
for (int i = 0; i <= iProcs; i++)
{
iStart = i * iRange;
// lets add what's been processed
iEnd = iRange;
// find out how much record is left to process
int cntleft = totalRec - iStart;
if (cntleft < iEnd)
iEnd = cntleft;
// process data save images to db
var listSubset = packageList.GetRange(iStart, iEnd).ToList();
// service.PostToDB(listSubset);
}
私はあまり Thread プログラムをやったことがないので、専門家でも平凡でもありません。
任意の応答をいただければ幸いです。ありがとうございました。