簡體   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