我有;
var maxVal = l.TakeWhile(x=>x < val).Where(x=>Matches(x)).Max();
Run Code Online (Sandbox Code Playgroud)
这需要多少空间?linq是否构建了上面Where()条件的列表,或者是Max()只是迭代IEnumerable跟踪当前的Max()是什么?
除了询问SO f之外,我在哪里可以找到更多关于此的信息
我已经使用Reflector验证了Enumerable.TakeWhile,Enumerable.Where和Enumerable.Max中的每一个都在恒定的空间中运行.因此,整个查询应该在恒定的空间中运行.考虑到TakeWhile和Where在哪里使用延迟执行+流媒体,这并不奇怪.Max不使用延迟执行,但只需要存储'max far'和源枚举器可枚举.