4
我有以下代碼:Enumerable.Range和內存分配
IEnumerable<int> elements = Enumerable.Range(1, Int32.MaxValue);
Console.WriteLine("Size of System.Int32: {0}", sizeof(int));
Console.Write("Iterating over {0} elements... ", elements.Count());
Parallel.ForEach(elements, _ => { });
Console.WriteLine("Done.");
此打印出:
> Size of System.Int32: 4
> Iterating over 2147483647 elements... Done.
不過,我不明白這是爲什麼不引發OutOfMemoryException
。
他們知道每int
值佔4
字節的空間,分配的int
Int32.MaxValue
量應占〜8GB
檢查我的應用程序,這個過程aprox的佔用。 〜5.200KB。
元素正在迭代成功,所以他們必須分配到某個地方,對吧?
LINQ如何實現這一目標?
我建議你看看https://en.wikipedia.org/wiki/Lazy_evaluation#Implementation,因爲懶惰評估是LINQ的全部內容! (和monads ofc!) – flindeberg
不錯的嘗試,但c#設計師更聰明:P如果它是關於懶加載然後通過元素foreach會導致內存增加,我懷疑它,你 – mikus
@mikus誰是一個評論?你知道懶惰加載和懶惰評估有區別嗎? (實際上是50%這個詞) – flindeberg