延後執行與延遲評估 (LINQ to XML)

若要使用延後執行,通常會實作查詢和座標軸運算。 本主題說明延後執行的條件與優點,以及一些實作考量。

延後執行

延後執行是指延遲評估運算式,直到實際需要其「實現的」值為止。 當您必須管理大型資料集合,尤其是在包含一系列鏈結之查詢或管理的程式中時,延後執行會明顯改善效能。 在最好的情況下,延後執行僅能單一逐一查看來源集合。

LINQ 技術可讓延後執行大量用於 System.Linq 核心類別的成員以及各種 LINQ 命名空間中的擴充方法,例如,System.Xml.Linq.Extensions

在 Iterator 區塊中使用時,C# 語言的 yield 關鍵字 (yield-return 陳述式的形式) 直接就能支援延後執行。 此類 Iterator 必須傳回型別 IEnumeratorIEnumerator<T> (或衍生型別) 的集合。

積極評估與延遲評估的比較

當您撰寫實作延後執行的方法時,您也必須決定要使用延遲評估或急切評估來實作方法。

  • 若為「延遲評估」,來源集合的單一項目會在每次呼叫 Iterator 時進行處理。 這是實作 Iterator 的一般方式。
  • 若為「急切評估」,第一次呼叫 Iterator 時,就會處理整個集合。 同時,可能也需要來源集合的暫存副本。 例如,OrderBy 方法必須在傳回第一個項目前,排序整個集合。

延遲評估通常會產生較好的效能,因為它會平均分散整個集合評估的負荷處理,並將暫存資料的使用率降到最低。 當然,對於某些運算而言,沒有具體化中繼結果之外的其他選擇。

如需 C# 和 Visual Basic 中延後執行的程式設計範例,請參閱 延後執行範例

另請參閱