我有很多數據要導入到我的數據庫。並行 - 保存於數據庫
這些數據需要治療,過濾,關節等等。因此,所有事情都由對象完成,在開始之前攜帶所有表格,並將所有對象保存到最後。
經過全部處理後,我運行命令進行保存。這需要很長時間。我想練習方法也不盡相同:
Task.Factory.StartNew(() => { while (allCSV.Length % 4 != 0) { Save(allCSV.FirstOrDefault()); allCSV = allCSV.Skip(1).ToArray(); }
int count1 = 0;
int middle = allCSV.Length/4;
int count2 = middle;
int count3 = middle * 2;
int count4 = middle * 3;
Parallel.For(0, 4, new Action<int>((i) =>
{
switch (i)
{
case 0:
for (int j = 0; j < middle; j++)
{
Save(allCSV[count1]);
count1++;
}
break;
case 1:
for (int k = 0; k < middle; k++)
{
Save(allCSV[count2]);
count2++;
}
break;
case 2:
for (int l = 0; l < middle; l++)
{
Save(allCSV[count3]);
count3++;
}
break;
case 3:
for (int m = 0; m < middle; m++)
{
Save(allCSV[count4]);
count4++;
}
break;
}
}
}
這將是正確的嗎?簡化我的流程最好的方法是什麼?
有些考慮,所用的計算機是最新一代。數據庫是MySQL。
用於保存的ORM非常簡單,沒有任何優化。
這可能是一個問題。例如,每個對象都有X關係。不是對稱的物體。如果我讓他控制並行。我最終可能會失去太多的表現。 – 2012-08-15 21:45:57
如果需要,Parallel.ForEach將動態添加線程。通常我通過提供一個帶有MaxDegreeOfParallelism的ParallelOptions對象來限制它到environment.processorcount。 – IvoTops 2012-08-16 12:58:06