Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 22799|Отговор: 1

[Източник] Linq: Никога не използвайте Count() > 0, за да определите, че множеството не е празно

[Копирай линк]
Публикувано в 12.10.2017 г. 13:25:01 ч. | | | |
Преди Linq обикновено използвахме следния метод, за да определим дали колекцията е непразна, т.е. колекцията съдържа елементи:


Използвайки атрибута Дължина или Брой, няма проблем с горното писане.

Но в ерата на Линк, методът за разширение на Enumerable.Count "обединява" свойствата Length и Count, което води до следния начин на писане за оценка на ненулевост:


Това писане е добре и работи добре, но може да причини много сериозни проблеми с производителността.

Имайте предвид, че е възможно, но не непременно, и ако горният метод бъде въведен като масив<T>, списък или колекция<T>, няма да има проблем.



Тогава кога ще се обърка нещо? Нека разгледаме следните методи:


Когато се извика:



Скоростта на изпълнение ще бъде доста бавна, а на компютъра ми отне около 70 секунди да изпълни източника. Count() > 0。


Ако го анализирате, ще откриете, че yield return i в ред 5 на GetNums кода се изпълнява int. MaxValue, необходимо ли е?

Всъщност, стига да върнем един елемент, можем да заключим, че множеството е непразно и няма нужда да връщаме всички елементи.

И така, как да преценяваме? Можем да използваме метода Enumerable.Any extension:



Модифицирайте метода SomeAction по следния начин:



Обади се отново и ще видиш, че времето за изпълнение е пренебрежимо.


В обобщение, Count() > 0 неизбежно ще има проблеми с производителността, когато срещне yeild return.






Предишен:C# имплементация на три таймера
Следващ:JS String до дата и дата плюс ден
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com