Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 22799|Jawab: 1

[Sumber] Catatan: Jangan pernah menggunakan Count() > 0 untuk menentukan bahwa set tidak kosong

[Salin tautan]
Diposting pada 12/10/2017 13.25.01 | | | |
Sebelum Linq, kita biasanya menggunakan metode berikut untuk menentukan apakah koleksi tidak kosong, yaitu koleksi berisi elemen:


Dengan menggunakan atribut Length atau Count, tidak ada masalah dengan penulisan di atas.

Tetapi di era Linq, metode ekstensi Enumerable.Count "menyatukan" properti Length dan Count, menghasilkan cara penulisan berikut untuk menilai non-nullity:


Tulisan ini baik-baik saja dan berfungsi dengan baik, tetapi dapat menyebabkan masalah kinerja yang sangat serius.

Perhatikan bahwa itu mungkin, belum tentu, dan jika metode di atas diteruskan sebagai Array<T>, List, atau Collection<T>, tidak akan ada masalah.



Jadi kapan ada yang salah? Mari kita lihat metode berikut:


Saat dipanggil:



Kecepatan eksekusi akan cukup lambat, dan butuh waktu sekitar 70 detik bagi komputer saya untuk mengeksekusi sumbernya. Hitung () > 0。


Jika Anda menganalisisnya, Anda akan menemukan bahwa pengembalian hasil i di baris 5 kode GetNums mengeksekusi int. MaxValue, apakah perlu?

Faktanya, selama kita mengembalikan satu elemen, kita dapat menyimpulkan bahwa himpunan tersebut tidak kosong, dan tidak perlu mengembalikan semua elemen sama sekali.

Jadi bagaimana cara menilai? Kita dapat menggunakan metode ekstensi Enumerable.Any:



Ubah metode SomeAction sebagai berikut:



Panggil lagi dan Anda akan menemukan bahwa waktu eksekusi dapat diabaikan.


Singkatnya, Count() > 0 pasti akan memiliki masalah kinerja ketika menghadapi pengembalian yeild.






Mantan:C# implementasi tiga timer
Depan:JS string hingga tanggal dan tanggal ditambah hari
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com