繁体   English   中英

C#LINQ优化

[英]C# LINQ optimization

优化以下类型语句的正确方法是什么:

IEnumerable<T> sequence = BuildSequence();
// 'BuildSequence' makes some tough actions and uses 'yield return'
// to form the resulting sequence.

现在,如果我愿意只采取一些第一个元素,我可以使用类似的东西:

sequence.Take(5);

因此,如果我的BuildSequence序列实际上包含数千个元素,我显然不希望构造所有元素,因为我只需要其中的5个。

LINQ是否优化了这种操作,或者我必须自己发明一些东西?

迭代器块yield return )为您处理此问题; 迭代器块是一个 API; 只有在迭代器(或Dispose() )的每个MoveNext()调用期间才会发生工作。 由于Take() 不会读取整个流,这种行为将被保留。

但请注意,某些操作需要在本地缓冲数据 - 最显着的是GroupByOrderBy ; 但只要你使用非缓冲操作,你就可以了。

例如:

static IEnumerable<int> ReadInts() {
    var rand = new Random();
    while(true) yield return rand.Next();
}
...
int count = ReadInts().Take(10).Count(); // 10 - it doesn't loop forever

你应该看看这个:

LINQ和延期执行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM