Eksekusi yang ditangguhkan serta evaluasi malas (LINQ ke XML)

Operasi kueri dan sumbu sering diimplementasikan untuk menggunakan eksekusi yang ditangguhkan. Artikel ini menjelaskan persyaratan dan keuntungan dari eksekusi yang ditangguhkan, dan beberapa pertimbangan implementasi.

Eksekusi yang ditangguhkan

Eksekusi yang ditangguhkan berarti bahwa evaluasi ekspresi tertunda sampai nilai yang direalisasikan benar-benar diperlukan. Eksekusi yang ditangguhkan bisa sangat meningkatkan performa ketika Anda perlu memanipulasi pengumpulan data besar, terutama dalam program yang berisi serangkaian kueri atau manipulasi berantai. Dalam kasus terbaik, eksekusi yang ditangguhkan hanya memungkinkan satu iterasi melalui koleksi sumber.

Teknologi LINQ memanfaatkan eksekusi yang ditangguhkan secara ekstensif di anggota kelas inti System.Linq dan dalam metode ekstensi di berbagai namespace layanan LINQ, seperti System.Xml.Linq.Extensions.

Eksekusi yang ditangguhkan didukung secara langsung dalam bahasa C# oleh kata kunci tangguhkan (Referensi C#) (dalam bentuk yield-return pernyataan) ketika digunakan dalam sebuah blok iterator. Iterator semacam itu harus mengembalikan koleksi jenis IEnumerator atau IEnumerator<T> (atau jenis turunan).

Evaluasi rajin vs. malas

Ketika menulis metode yang mengimplementasikan eksekusi yang ditangguhkan, Anda juga harus memutuskan apakah akan menerapkan metode menggunakan evaluasi malas atau evaluasi rajin.

  • Dalam evaluasi malas, satu elemen koleksi sumber diproses selama setiap panggilan ke iterator. Ini adalah cara umum di mana iterator diimplementasikan.
  • Dalam evaluasi rajin, panggilan pertama ke iterator akan mengakibatkan seluruh koleksi diproses. Salinan sementara koleksi sumber mungkin juga diperlukan. Misalnya, metode OrderBy harus mengurutkan seluruh koleksi sebelum mengembalikan elemen pertama.

Evaluasi malas biasanya menghasilkan performa yang lebih baik karena mendistribusikan pemrosesan overhead secara merata di seluruh evaluasi pengumpulan serta meminimalkan penggunaan data sementara. Tentu saja, untuk beberapa operasi, tidak ada pilihan lain selain mewujudkan hasil menengah.

Lihat Contoh eksekusi yang ditangguhkan untuk contoh pemrograman eksekusi yang ditangguhkan di C# dan Visual Basic.

Lihat juga