c# - 简单 linq(to objects) 查询的空间复杂度

标签 c# linq

我有;

var maxVal = l.TakeWhile(x=>x < val).Where(x=>Matches(x)).Max();

这需要多少空间? linq 是否建立了上述 Where() 条件的列表,或者 Max() 只是遍历 IEnumerable 以跟踪当前的 Max() 是什么?

除了在 SO f 上询问之外,我在哪里可以找到有关此的更多信息

最佳答案

我已经用 Reflector 验证了 Enumerable.TakeWhile、Enumerable.Where 和 Enumerable.Max 中的每一个都在恒定空间中运行。因此,整个查询应该在常量空间中运行。 毫不奇怪,考虑到 TakeWhile 和 Where 被指定使用延迟执行 + 流。 Max不使用延迟执行,只需要在source enumerable上存储'max so far'和枚举数。

关于c# - 简单 linq(to objects) 查询的空间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3435803/

相关文章:

javascript - Web API Post方法不保存数据

c# - 如何将对象数组转换为泛型类型数组

c# - JSON.net反序列化

c# - 如何迭代子列表中的元素,然后从列表中删除子列表?性能卓越

c# - 为什么获取成员表达式成员名称在 C# 和 VB.NET 之间有所不同?

c# - 使用 Caliburn.Micro.Contrib 通用对话框

c# - 使用 $expand 时的 Web API OData 媒体类型格式化程序

c# - 在单个 LINQ 语句中使用 .Select 和 .Where

c# - 使自定义类可用于 LINQ 查询

c# - 将文件从 ASP.NET Core Web API 发布到另一个 ASP.NET Core Web API