See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 22799|Vastuse: 1

[Allikas] Linq: Ära kunagi kasuta Count() > 0, et määrata, et hulk on mitte-tühi

[Kopeeri link]
Postitatud 12.10.2017 13:25:01 | | | |
Enne Linqi kasutasime tavaliselt järgmist meetodit, et määrata, kas kogu on mitte-tühi, st kogum sisaldab elemente:


Kasutades omadust Pikkus või Loendus, pole ülaltoodud kirjutamisega mingit probleemi.

Kuid Linqi ajastul "ühendas" Enumerable.Count laiendusmeetod Pikkuse ja Loenduse omadused, mille tulemusena on järgmine kirjutamisviis mitte-nullsuse hindamiseks:


See kirjutis on okei ja toimib hästi, kuid võib põhjustada väga tõsiseid jõudlusprobleeme.

Pane tähele, et see on võimalik, mitte tingimata, ja kui ülaltoodud meetod edastatakse <T>massiivi, loendi või <T>kogumikana, siis probleemi ei tekki.



Millal siis midagi valesti läheb? Vaatame järgmisi meetodeid:


Kui kutsutakse:



Täitmise kiirus on üsna aeglane ja minu arvutil kulus umbes 70 sekundit, et lähtekoodi käivitada. Count() > 0。


Kui seda analüüsida, leiad, et GetNums koodi 5. reas olev yield return i täitub int. MaxValue, kas see on vajalik?

Tegelikult, kui tagastame ühe elemendi, võime järeldada, et hulk on mitte-tühi ja pole vaja kõiki elemente tagastada.

Kuidas siis hinnata? Võime kasutada Enumerable.Mis tahes laiendusmeetodit:



Muuda SomeAction meetodit järgmiselt:



Kutsu see uuesti ja näed, et hukkamisaeg on tühine.


Kokkuvõttes esineb Count() > 0 paratamatult jõudlusprobleeme, kui ta kohtab tagasitulekut.






Eelmine:C# kolme taimeri rakendus
Järgmine:js string kuni tänaseks ja kuupäev pluss päev
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com