我正在處理+100000行並執行並行。這爲更快的處理。並行不會執行所有記錄
邏輯行爲應該是:100000記錄具有85000個groupId,意思是MyItems應該保存85000個記錄。
這是不是這樣的......我結束了不同的金額,然後85000
的過程如下:
從DB
獲取所有值獲得所有的ID(不行ID的,而是一個的groupId)整數的數組內
過程中的groupId的
var myItems = new List<MyItem>(IDCounter.Length);
Parallel.For(0, IDCounter.Length, (i, loopState) =>
{
if(!SomeParameter)
loopState.Stop();
var records = (from m in AllValues where m.GroupId == IDCounter[i] select m).ToList();
var recordList = new List<MyRecords>();
for(var j = 0; j<records.Count; j++)
{
recordList.Add(new MyRecord{Text = records[j].OtherValue});
}
myItems.Add(new MyItem(Text = records[0].SomeValue, List = recordList));
});
有什麼想法?
「myItems」的類型是什麼?如果它是'List',那麼你可以從多個threasd訪問它,儘管它不是線程安全的。此外,這看起來像僞代碼:'new MyItem(Text = records [0] .SomeValue,List = l)'。如果您發佈*真實*代碼,這將更容易幫助您 - 理想情況下是一個簡短但完整的示例,展示問題。 –
2014-10-02 12:11:38
由於您始終處理項目的完整列表,因此我無法看到這比順序算法更有效。 – Stilgar 2014-10-02 12:11:52
@JonSkeet;我以爲我提供了一個簡短但可用的真實代碼,它與我所擁有的 – Schuere 2014-10-02 12:13:31