Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 22799|Antwoord: 1

[Bron] Linq: Gebruik nooit Count() > 0 om te bepalen dat de verzameling niet-leeg is

[Link kopiëren]
Geplaatst op 12-10-2017 13:25:01 | | | |
Voor Linq gebruikten we meestal de volgende methode om te bepalen of een verzameling niet-leeg is, dat wil zeggen dat een verzameling elementen bevat:


Met het Length or Count-attribuut is er geen probleem met bovenstaande tekst.

Maar in het Linq-tijdperk "verenigde" de Enumerable.Count extension-methode de eigenschappen van Length en Count, wat resulteerde in de volgende manier van schrijven om niet-nulliteit te beoordelen:


Dit schrijfwerk is prima en werkt prima, maar het kan zeer ernstige prestatieproblemen veroorzaken.

Let op: het is mogelijk, niet per se, en als bovenstaande methode wordt doorgegeven als een Array<T>, List of Collection<T>, zal er geen probleem zijn.



Dus wanneer gaat er iets mis? Laten we de volgende methoden bekijken:


Wanneer geroepen:



De uitvoeringssnelheid zal vrij traag zijn, en het duurde ongeveer 70 seconden voordat mijn computer de bron uitvoerde. Count() > 0。


Als je het analyseert, zul je zien dat de yield return i in regel 5 van de GetNums-code int. MaxValue, is dat nodig?

In feite kunnen we, zolang we één element teruggeven, concluderen dat de verzameling niet-leeg is, en is het helemaal niet nodig om alle elementen terug te geven.

Dus hoe moet ik beoordelen? We kunnen de Enumerable.Any extension-methode gebruiken:



Wijzig de SomeAction-methode als volgt:



Bel het nog eens en je zult merken dat de uitvoeringstijd verwaarloosbaar is.


Samengevat zal Count() > 0 onvermijdelijk prestatieproblemen krijgen wanneer het yeild return tegenkomt.






Vorig:C#-implementatie van drie timers
Volgend:js-string tot datum en datum plus dag
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com