1

レコードの挿入(挿入)をテーブルに分割して、それほど遅くならないようにする必要があるシナリオがあります。現在、挿入するレコードは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 プログラムをやったことがないので、専門家でも平凡でもありません。

任意の応答をいただければ幸いです。ありがとうございました。

4

1 に答える 1

1
  1. 可能であれば、まず最初に SqlBulkCopy (SQL サーバー用) または他の BulkCopy (DB ベンダーに依存) を使用します。
  2. できるだけ早くデータを挿入する必要がある場合は、実際のハードウェアで複数の挿入スレッドを使用してベンチマークを実行してください。このデータにより、挿入スレッドの数を最適な時間に最適化できます。
于 2013-10-18T15:31:15.037 に答える