Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 22799|Odgovoriti: 1

[Vir] Linq: Nikoli ne uporabljajte Count() > 0 za določitev, da je množica neprazna

[Kopiraj povezavo]
Objavljeno na 12. 10. 2017 13:25:01 | | | |
Pred Linqom smo običajno uporabljali naslednjo metodo za ugotavljanje, ali je zbirka neprazna, tj. zbirka vsebuje elemente:


Z uporabo atributa Dolžina ali Število ni težav z zgornjim pisanjem.

Vendar pa je v Linqovi dobi metoda razširitve Enumerable.Count "združila" lastnosti dolžine in štetja, kar je privedlo do naslednjega načina pisanja za presojo ne-ničelnosti:


To pisanje je v redu in deluje, vendar lahko povzroči zelo resne težave z zmogljivostjo.

Upoštevajte, da je to mogoče, ne nujno, in če se zgornja metoda prenese kot Array<T>, List ali Collection<T>, ne bo težav.



Kdaj bo torej šlo kaj narobe? Poglejmo si naslednje metode:


Ko je poklican:



Hitrost izvajanja bo precej počasna, moj računalnik je za izvedbo vira potreboval približno 70 sekund. Count() > 0。


Če jo analizirate, boste ugotovili, da yield return i v vrstici 5 kode GetNums izvaja int. MaxValue, ali je to potrebno?

Pravzaprav, dokler vrnemo en element, lahko zaključimo, da je množica neprazna in ni potrebe, da bi vrnili vse elemente.

Kako torej presoditi? Uporabimo lahko metodo Enumerable.Any extension:



Metodo SomeAction spremenite na naslednji način:



Če ga pokličete še enkrat, boste ugotovili, da je čas izvedbe zanemarljiv.


Za povzetek, Count() > 0 bo neizogibno imel težave z zmogljivostjo, ko bo naletel na yeild return.






Prejšnji:Implementacija treh časovnikov v C#
Naslednji:JS niz do datuma in datum plus dan
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com