Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 22799|Відповідь: 1

[Джерело] Лінк: Ніколи не використовуйте Count() > 0, щоб визначити, що множина не є порожньою

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


За допомогою атрибута Довжина або Кількість немає проблем із наведеним вище письмом.

Але в епоху Лінк метод розширення Enumerable.Count «об'єднав» властивості Довжини та Count, що призвело до наступного способу оцінки ненульності:


Цей текст працює нормально, але може спричинити серйозні проблеми з продуктивністю.

Зверніть увагу, що це можливо, але не обов'язково, і якщо наведений вище метод передати як масив<T>, список або <T>колекцію, проблем не буде.



То коли ж щось піде не так? Розглянемо такі методи:


Коли викликають:



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


Якщо проаналізувати, ви побачите, що yield return i у рядку 5 коду GetNums виконується int. MaxValue, чи це необхідно?

Насправді, якщо ми повертаємо один елемент, можна зробити висновок, що множина є непорожньою, і немає потреби повертати всі елементи.

То як же судити? Ми можемо використати метод Enumerable.Any Extension:



Модифікуємо метод SomeAction наступним чином:



Зателефонуйте ще раз — і ви побачите, що час виконання майже незначний.


Підсумовуючи, Count() > 0 неминуче матиме проблеми з продуктивністю, коли зустріне yeild return.






Попередній:Реалізація трьох таймерів у C#
Наступний:js string to date і date plus day
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com