LINQ to XML 中的延後執行與延遲評估

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

延後執行

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

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

在 Iterator 區塊中使用時,支援在 C# 語言中,透過 yield 關鍵字 (以 yield-return 陳述式的形式) 直接支援延後執行。 此類 Iterator 必須傳回型別 IEnumeratorIEnumerator<T> (或衍生型別) 的集合。 在 Visual Basic 9.0 中沒有 yield 關鍵字的對應項目,因此,在這個語言中實作延後執行比較複雜。

急切評估與延遲評估之比較

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

  • 若是「延遲評估」,來源集合的單一項目會在每次呼叫 Iterator 時進行處理。 這是實作 Iterator 的一般方式。

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

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

後續步驟

此教學課程中的下一個主題說明延後執行:

請參閱

參考

yield (C# 參考)

概念

教學課程:將查詢鏈結在一起

概念與術語 (功能性轉換)

彙總作業