Bagikan melalui


Eksekusi yang ditangguhkan dan penilaian diperlambat (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 dapat sangat meningkatkan performa ketika Anda harus 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 langsung dalam bahasa C# oleh kata kunci hasil (Referensi C# ) (dalam bentuk yield-return pernyataan) ketika digunakan dalam blok iterator. Iterator semacam itu harus mengembalikan koleksi jenis IEnumerator atau IEnumerator<T> (atau jenis turunan).

Evaluasi cepat vs. malas

Ketika Anda menulis metode yang menerapkan eksekusi tertunda, Anda juga harus memutuskan apakah akan menerapkan metode menggunakan evaluasi lambat atau evaluasi cepat.

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

Evaluasi malas biasanya memberikan kinerja yang lebih baik karena mendistribusikan pemrosesan overhead secara merata sepanjang evaluasi koleksi dan 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