gpt4 book ai didi

c# - Linq 的 Skip and Take 是否针对数组进行了优化? [4.0版]

转载 作者:太空狗 更新时间:2023-10-30 00:40:34 24 4
gpt4 key购买 nike

从数组中复制范围是一种常见的情况。 C# 以多种方式支持此操作,例如使用 Array.Copy,以及 Linq 的 Skip 和 Take 组合。

从 .NET 4.0 开始,Skip 和 Take 操作是否仍然增加了相当大的开销,或者它们是否识别(在编译时或运行时)它们的目标是数组?

澄清一下:我指的是 a) 跳过初始字节所花费的时间和 b) 不受副作用影响的 Skip-Take-ToArray 组合。例如,new byte[10000].Skip(9999).Take(1).ToArray() 可以以这种方式优化并且(对于大 n)会很明显更快。

最佳答案

Skip/Take 仍然在 O(n) 中运行,因为 LINQ 必须了解如何更改数组中的元素以及对象如何必须了解更改。因此,优化 O( 1) 看似微不足道,目前尚未实现。

参见:https://edulinq.googlecode.com/hg/posts/40-Optimization.html

Jon Skeet 几年前在“重新实现 LINQ”(http://codeblog.jonskeet.uk/2011/01/02/reimplementing-linq-to-objects-part-23-take-skip-takewhile-skipwhile/) 中讨论了这些以及更多内容。这是一本很棒的书。

关于c# - Linq 的 Skip and Take 是否针对数组进行了优化? [4.0版],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26685234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com