Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 22799|Ответ: 1

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

[Скопировать ссылку]
Опубликовано 12.10.2017 13:25:01 | | | |
До Linq мы обычно использовали следующий метод для определения, является ли коллекция непустой, то есть коллекция содержит элементы:


Используя атрибут Длина или Количество, с описанным выше нет проблем.

Но в эпоху Linq метод расширения Enumerable.Count «унифицировал» свойства Length и Count, что привело к следующему способу записи для оценки ненулевости:


Эта запись работает нормально и нормально, но может вызвать серьёзные проблемы с производительностью.

Обратите внимание, что это возможно, но не обязательно, и если вышеуказанный метод будет передан в виде <T>массива, списка или <T>коллекции, проблем не возникнет.



Так когда же что-то пойдёт не так? Рассмотрим следующие методы:


Когда его вызывают:



Скорость выполнения будет довольно низкой, и мой компьютер запустил исходный код примерно за 70 секунд. Count() > 0。


Если проанализировать, то обнаружите, что yield return i в строке 5 кода GetNums выполняется int. MaxValue, это обязательно?

На самом деле, если мы возвращаем один элемент, можно сделать вывод, что множество не пусто, и нет необходимости возвращать все элементы.

Так как же судить? Мы можем использовать метод Enumerable.Any extension:



Модифицируйте метод SomeAction следующим образом:



Позвоните ещё раз — и вы обнаружите, что время исполнения незначительно.


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






Предыдущий:Реализация трёх таймеров в C#
Следующий:JS String to date и date plus day
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com