Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 22799|Odpoveď: 1

[Zdroj] Linq: Nikdy nepoužívajte Count() > 0 na určenie, že množina nie je prázdna

[Kopírovať odkaz]
Zverejnené 12. 10. 2017 13:25:01 | | | |
Pred Linq sme zvyčajne používali nasledujúcu metódu na určenie, či je kolekcia neprázdna, t. j. či kolekcia obsahuje prvky:


Použitím atribútu Dĺžka alebo Počet nie je problém s vyššie uvedeným písaním.

Ale v ére Linq metóda rozšírenia Enumerable.Count "zjednotila" vlastnosti Dĺžky a Počítania, čo viedlo k nasledujúcemu spôsobu písania na posúdenie nenulity:


Tento text je v poriadku a funguje dobre, ale môže spôsobiť veľmi vážne problémy s výkonom.

Upozorňujeme, že je to možné, nie nevyhnutne, a ak je vyššie uvedená metóda vložená ako pole<T>, zoznam alebo kolekcia<T>, nebude problém.



Kedy sa teda niečo pokazí? Pozrime sa na nasledujúce metódy:


Keď je zavolaný:



Rýchlosť vykonávania bude dosť pomalá a trvalo asi 70 sekúnd, kým môj počítač vykonal zdroj. Count() > 0。


Ak ho analyzujete, zistíte, že výnos return i v riadku 5 kódu GetNums vykonáva int. MaxValue, je to nevyhnutné?

V skutočnosti, pokiaľ vrátime jeden prvok, môžeme usúdiť, že množina nie je prázdna a nie je potrebné vracať všetky prvky.

Ako teda posúdiť? Môžeme použiť metódu rozšírenia Enumerable.Any:



Modifikujte metódu SomeAction nasledovne:



Ak ho zavoláte znova, zistíte, že čas vykonania je zanedbateľný.


Na záver, Count() > 0 bude nevyhnutne mať problémy s výkonom, keď narazí na yeild return.






Predchádzajúci:Implementácia trojnásobných časovačov v C#
Budúci:JS reťazec do dátumu a dátum plus deň
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com