查詢和軸運算通常會實現以使用延後執行。 本文說明延遲執行的需求和優點,以及一些實作考慮。
延遲執行
延遲執行表示表達式的評估會延遲到實際需要 其實現 值為止。 當您必須操作大型數據集時,延遲執行可以顯著提升效能,特別是在包含一系列串連的查詢或操縱的程式中。 在最佳情況下,延後執行只允許透過來源集合進行單一反覆專案。
LINQ 技術在核心 System.Linq 類別成員和各種 LINQ 命名空間的擴充方法中,廣泛運用延後執行,例如 System.Xml.Linq.Extensions。
在迭代器區塊中使用 yield(C# 參考) 關鍵字時,以語句的形式 yield-return 直接支援延遲執行。 這類反覆運算器必須傳回型別IEnumerator或IEnumerator<T>(或衍生類型)的集合。
主動評估與惰性評估
當您撰寫實作延後執行的方法時,您也必須決定要使用惰性求值或急迫求值來實作方法。
- 在 延遲評估中,每次呼叫反覆運算器時,都會處理來源集合的單一元素。 這是實作反覆運算器的典型方式。
- 在 積極評估中,對迭代器的第一次呼叫會導致整個集合被處理。 可能也需要來源集合的暫存複本。 例如,OrderBy 方法必須排序整個集合,才能返回第一個元素。
延遲評估通常會產生較佳的效能,因為它會在集合評估期間平均分散額外負荷處理,並將暫存數據的使用降到最低。 當然,對於某些作業,除了具體化中繼結果之外,沒有其他選項。
如需 C# 和 Visual Basic 中延遲執行的程式設計範例,請參閱 延後執行範例 。