cod*_*nix 5 .net linq optimization linq-to-objects
var res = new int[1000000].Skip(999999).First();
Run Code Online (Sandbox Code Playgroud)
如果此查询只使用索引器而不是遍历999999条目,那将是很好的.
我查看了System.Core.dll并注意到,与之相反Skip(),Count()扩展方法已经过优化.如果IEnumerable实现ICollection那么它只是调用Count属性.
如果您查看我对类似问题的回答,似乎应该很容易Skip为任何提供非幼稚(即抛出适当的异常)优化IList:
public static IEnumerable<T> Skip<T>(this IList<T> source, int count)
{
using (var e = source.GetEnumerator())
while (count < source.Count && e.MoveNext())
yield return source[count++];
}
Run Code Online (Sandbox Code Playgroud)
当然,您的示例使用数组。由于数组在迭代期间不会抛出异常,因此即使执行像我的函数一样复杂的操作也是不必要的。因此,人们可以得出结论,微软没有优化它,因为他们没有想到这一点,或者他们认为这是一个不值得优化的常见情况。
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |