我遇到過這種情況,使用LINQ工作正常,但PLINQ導致「OutOfMemoryException」。以下是示例代碼使用PLINQ導致OutofMemory異常但不與LINQ一起使用?
static void Main(string[] args)
{
Stopwatch timer = new Stopwatch();
var guidList = new List<Guid>();
for (int i = 0; i < 10000000; i++)
{
guidList.Add(Guid.NewGuid());
}
timer.Start();
// var groupedList = guidList.GroupBy(f => f).Where(g => g.Count() > 1);
var groupedList = guidList.AsParallel().GroupBy(f => f).Where(g => g.Count() > 1);
timer.Stop();
Console.WriteLine(string.Format("Took {0} ms time with result: {1} duplications", timer.ElapsedMilliseconds, groupedList.Count()));
Console.ReadKey();
}
拋出內部異常「類型‘System.OutOfMemoryException的’引發的異常」 ..可能是什麼問題?在這種情況下使用PLINQ的準則是什麼,請提前致謝。
GroupBy並不是一個好的選擇。嘗試在羣組之後移動,看看是否解決了這個問題。平行的地方很容易做到。 – Rangoric 2012-02-07 17:10:27
我會猜測你得到這個預期的原因是因爲你試圖分配160,000,000字節到內存中。 (GUID是128位即16字節)。如果我沒有弄錯的話,我認爲這會降低到大約16GB。當你使用非並行方法時,代碼是否真的完成了,分配多少內存也應該失敗。 – 2012-02-07 17:15:18
你正在做一切在64位操作系統上的權利? – 2012-02-07 17:15:45