Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 22799|Atsakyti: 1

[Šaltinis] Linq: Niekada nenaudokite Count() > 0, kad nustatytumėte, kad rinkinys nėra tuščias

[Kopijuoti nuorodą]
Paskelbta 2017-10-12 13:25:01 | | | |
Prieš "Linq" paprastai naudojome šį metodą, kad nustatytume, ar kolekcija nėra tuščia, t. y. kolekcijoje yra elementų:


Naudojant atributą Ilgis arba Skaičius, nėra jokių problemų su aukščiau pateiktu rašymu.

Tačiau Linq eroje Enumerable.Count išplėtimo metodas "suvienijo" Length ir Count savybes, todėl buvo nustatytas toks rašymo būdas, kad būtų galima spręsti apie negaliojimą:


Šis rašymas yra geras ir veikia gerai, tačiau gali sukelti labai rimtų našumo problemų.

Atkreipkite dėmesį, kad tai įmanoma, nebūtinai, ir jei aukščiau pateiktas metodas bus perduotas kaip masyvas<T>, sąrašas ar rinkinys<T>, problemų nekils.



Taigi, kada kas nors nutiks? Pažvelkime į šiuos metodus:


Kai skambinama:



Vykdymo greitis bus gana lėtas, o mano kompiuteris užtruko apie 70 sekundžių, kol parengė šaltinį. Skaičius() > 0。


Jei jį išanalizuosite, pamatysite, kad išeigos grąžinimas i GetNums kodo 5 eilutėje vykdomas int. MaxValue, ar tai būtina?

Tiesą sakant, kol grąžiname vieną elementą, galime daryti išvadą, kad aibė nėra tuščia ir nereikia grąžinti visų elementų.

Taigi, kaip spręsti? Galime naudoti Enumerable.Any plėtinio metodą:



Pakeiskite "SomeAction" metodą taip:



Paskambinkite dar kartą ir pamatysite, kad vykdymo laikas yra nereikšmingas.


Apibendrinant, Count() > 0 neišvengiamai turės našumo problemų, kai susidurs su yeild return.






Ankstesnis:C# trijų laikmačių diegimas
Kitą:JS eilutė iki datos ir data plius diena
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com