我有一个场景,我需要将记录的插入(插入)划分到一个表中,这样它不会那么慢,目前我有 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);
}
我没有做过很多线程程序,所以我不是真正的专家,甚至不是它的平庸。
任何回应表示赞赏。谢谢你。