Tertib kaedah sambungan LINQ
Sumber soalan: Adakah susunan kaedah sambungan LINQ menjejaskan prestasi?
Soalan:
Mengapakah susunan kaedah sambungan LINQ tidak menjejaskan prestasi dengan ketara? Sebagai contoh, membandingkan dua pernyataan berikut, seseorang mungkin berfikir bahawa Where
diikuti dengan FirstOrDefault
adalah lebih perlahan daripada FirstOrDefault
diikuti dengan Where
:
<code class="language-csharp">hugeList.Where(x => x.Text.Contains("10000")).FirstOrDefault(); hugeList.FirstOrDefault(x => x.Text.Contains("10000"));</code>
Jawapan:
Andaian bahawa Where
diikuti dengan FirstOrDefault
akan menjadi lebih perlahan adalah salah. Where
Tidak perlu mencari semua perlawanan sebelum mendapat perlawanan pertama. Ia mendapatkan semula padanan atas permintaan, yang bermaksud jika hanya perlawanan pertama diperlukan, ia berhenti selepas ia menemui perlawanan pertama.
Untuk menggambarkan ini, bayangkan senario berikut:
Tiga orang mengambil bahagian:
- A memegang dek kad yang dikocok.
- B memakai baju bertulis "Jika kad merah".
- C berkata kepada B: "Beri saya kad pertama."
B akan berulang kali meminta kad daripada A sehingga A memberikan kad merah. Setelah kad merah pertama diperolehi, ia diserahkan kepada C dan proses tamat. B tidak perlu terus meminta kad daripada A selepas menemui kad merah pertama.
Begitu juga, dalam pernyataan LINQ, Where
adalah seperti B, menapis kad (item dalam senarai) untuk mencari padanan pertama. Ia tidak perlu mencari semua perlawanan sebelum mengembalikan perlawanan pertama.
Sebaliknya, jika susunan kaedah sambungan diterbalikkan, dengan FirstOrDefault
diikuti dengan Where
, keadaannya berbeza. FirstOrDefault
perlu mendapatkan semula item pertama, kemudian Where
perlu menggunakan penapisnya, yang akan melibatkan gelung melalui semua item. Ini akan menjadi kurang cekap daripada Where
diikuti dengan FirstOrDefault
.
Oleh itu, apabila menentukan kesan prestasi kaedah sambungan LINQ, adalah penting untuk mempertimbangkan susunan penggunaannya, kerana ia akan menjejaskan kecekapan operasi bergantung pada kaedah khusus yang digunakan.
Atas ialah kandungan terperinci Adakah Urutan Kaedah Sambungan LINQ (cth., Where and FirstOrDefault) Memberi Impak Prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!