Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 22799|Yanıt: 1

[Kaynak] Linq: Setin boş olmadığını belirlemek için asla Count() > 0 kullanma

[Bağlantıyı kopyala]
Yayınlandı 12.10.2017 13:25:01 | | | |
Linq'ten önce, bir koleksiyonun boş olup olmadığını belirlemek için genellikle aşağıdaki yöntemi kullanırdık, yani bir koleksiyon elemanlar içerir:


Uzunluk veya Sayı özelliğini kullandığınızda, yukarıdaki yazımda bir sorun yoktur.

Ancak Linq döneminde, Enumerable.Count uzatma yöntemi Length ve Count özelliklerini "birleştirerek" geçersiz olmamayı değerlendirmek için aşağıdaki yazım yöntemini ortaya çıkardı:


Bu yazı gayet iyi ve iyi çalışıyor, ama çok ciddi performans sorunlarına yol açabilir.

Bunun mümkün olduğunu, ancak mutlaka olmadığını unutmayın ve yukarıdaki yöntem Dizi<T>, Liste veya Koleksiyon olarak <T>aktarılırsa sorun olmaz.



Peki ne zaman bir şeyler ters gidecek? Aşağıdaki yöntemlere bakalım:


Çağrındığında:



Uygulama hızı oldukça yavaş olacak ve bilgisayarımın kaynağı çalıştırması yaklaşık 70 saniye sürdü. Count() > 0。


Analiz ederseniz, GetNums kodunun 5. satırındaki yield return'un int çalıştırıldığını göreceksiniz. MaxValue, gerekli mi?

Aslında, bir eleman döndürdüğümüz sürece, kümenin boş olmadığı sonucuna varabiliriz ve tüm elemanları geri göndermeye gerek yoktur.

Peki nasıl yargılanacak? Enumerable.Herhangi bir uzantı yöntemini kullanabiliriz:



SomeAction yöntemini aşağıdaki şekilde değiştirin:



Tekrar karar ver, infaz süresinin önemsiz olduğunu göreceksiniz.


Özetle, Count() > 0 dönüşle karşılaştığında kaçınılmaz olarak performans sorunları yaşayacaktır.






Önceki:C# üç zamanlayıcı uygulaması
Önümüzdeki:js String to date ve date plus day
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com