LINQ to XML 中的延迟执行和迟缓计算

实现查询和轴操作通常是为了使用延迟执行。 本主题解释延迟执行的要求和优点,以及某些实现注意事项。

延迟执行

延迟执行意味着表达式的计算延迟,直到真正需要它的实现值为止。 当必须操作大型数据集合,特别是在包含一系列链接的查询或操作的程序中操作时,延迟执行可以大大改善性能。 在最佳情况下,延迟执行只允许对源集合的单个循环访问。

LINQ 技术广泛应用了延迟执行,包括在核心 System.Linq 类的成员和不同 LINQ 命名空间中的扩展方法(如 System.Xml.Linq.Extensions)中使用。

当在迭代器块内使用时,C# 语言可以通过 yield 关键字(以 yield-return 语句形式),直接支持延迟执行。 此类迭代器必须返回类型为 IEnumeratorIEnumerator<T>(或派生类型)的集合。 在 Visual Basic 9.0 中,没有与 yield 对等的关键字,因此在这种语言中,实现延迟执行更加复杂。

积极计算与迟缓计算

当您编写实现延迟执行的方法时,还必须确定是使用迟缓计算还是积极计算来实现该方法。

  • 在迟缓计算中,在每次调用迭代器时,都处理源集合的一个元素。 这是实现迭代器的典型方式。

  • 在积极计算中,在第一次调用迭代器时,就会对整个集合进行处理。 还可能需要源集合的临时副本。 例如,OrderBy 方法必须在返回第一个元素前对整个集合进行排序。

迟缓计算通常产生更好的性能,因为它将系统开销处理平均分配到整个集合的计算中,并将临时数据的使用降至最低。 当然,对于某些操作,除了具体化中间结果之外,再没有其他选择。

后续步骤

本教程的下一个主题将解释延迟执行:

请参见

参考

yield(C# 参考)

概念

教程:将查询链接在一起

概念和术语(函数转换)

聚合操作