简单的linq(到对象)查询的空间复杂性

Ano*_*nym 6 c# linq

我有;

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之外,我在哪里可以找到更多关于此的信息

Ani*_*Ani 7

我已经使用Reflector验证了Enumerable.TakeWhile,Enumerable.Where和Enumerable.Max中的每一个都在恒定的空间中运行.因此,整个查询应该在恒定的空间中运行.考虑到TakeWhile和Where在哪里使用延迟执行+流媒体,这并不奇怪.Max不使用延迟执行,但只需要存储'max far'和源枚举器可枚举.