Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 22799|Odpověď: 1

[Zdroj] Linq: Nikdy nepoužívejte Count() > 0 k určení, že množina je neprázdná

[Kopírovat odkaz]
Zveřejněno 12.10.2017 13:25:01 | | | |
Před Linqem jsme obvykle používali následující metodu k určení, zda je kolekce neprázdná, tj. obsahuje prvky:


Použitím atributu Délka nebo Počet není s výše uvedeným psaním žádný problém.

Ale v éře Linq metoda rozšíření Enumerable.Count "sjednotila" vlastnosti Length and Count, což vedlo k následujícímu způsobu zápisu pro posouzení nenulity:


Tento text je v pořádku a funguje dobře, ale může způsobit velmi vážné problémy s výkonem.

Všimněte si, že je to možné, ne nutně, a pokud je výše uvedená metoda předána jako pole<T>, seznam nebo kolekce<T>, nebude problém.



Tak kdy se něco pokazí? Podívejme se na následující metody:


Když je povolán:



Rychlost spuštění bude poměrně pomalá a trvalo asi 70 sekund, než můj počítač spustil zdroj. Count() > 0。


Pokud ji analyzujete, zjistíte, že výnosový return i v řádku 5 kódu GetNums vykonává int. MaxValue, je to nutné?

Ve skutečnosti, pokud vrátíme jeden prvek, můžeme usoudit, že množina není prázdná a není nutné vracet všechny prvky.

Tak jak to posoudit? Můžeme použít metodu rozšíření Enumerable.Any:



Modifikujte metodu SomeAction následovně:



Zavolejte to znovu a zjistíte, že doba provedení je zanedbatelná.


Shrnuto, Count() > 0 bude mít nevyhnutelně problémy s výkonem, když narazí na návrat yeild.






Předchozí:Implementace tří časovačů v C#
Další:js řetězec do data a datum plus den
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com