Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 22799|Odpowiedź: 1

[Źródło] Linq: Nigdy nie używaj Count() > 0, aby określić, że zbiór jest niepusty

[Skopiuj link]
Opublikowano 12.10.2017 13:25:01 | | | |
Przed Linq zwykle stosowaliśmy następującą metodę, aby określić, czy kolekcja jest niepusta, tzn. zawiera elementy:


Korzystając z atrybutu Długość lub Liczba, nie ma problemu z powyższym tekstem.

Jednak w erze Linq metoda rozszerzenia Enumerable.Count "ujednoczyła" właściwości Length i Count, co skutkowało następującym sposobem pisania oceniającym nie-nullity:


To pisanie jest w porządku i działa dobrze, ale może powodować poważne problemy z wydajnością.

Należy zauważyć, że jest to możliwe, niekoniecznie, i jeśli powyższa metoda zostanie przekazana jako tablica<T>, lista lub kolekcja, nie <T>będzie problemu.



Kiedy więc coś pójdzie nie tak? Przyjrzyjmy się następującym metodom:


Gdy zostaje wezwany:



Prędkość wykonania będzie dość wolna, a komputer potrzebował około 70 sekund, by wykonać źródło. Count() > 0。


Jeśli to przeanalizujesz, okażesz, że yield return i w linii 5 kodu GetNums wykonuje int. MaxValue, czy jest konieczna?

W rzeczywistości, dopóki zwracamy jeden element, możemy stwierdzić, że zbiór jest niepusty i nie ma potrzeby zwracania wszystkich elementów.

Jak więc ocenić? Możemy użyć metody rozszerzenia Enumerable.Any:



Zmodyfikuj metodę SomeAction w następujący sposób:



Zadzwoń jeszcze raz, a zobaczysz, że czas wykonania jest znikomy.


Podsumowując, Count() > 0 nieuchronnie będzie miał problemy z wydajnością, gdy napotka yeild return.






Poprzedni:Implementacja trzech timerów w C#
Następny:String js do date i date plus day
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com