Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 22799|Respuesta: 1

[Fuente] Linq: Nunca uses Count() > 0 para determinar que el conjunto no está vacío

[Copiar enlace]
Publicado en 12/10/2017 13:25:01 | | | |
Antes de Linq, solíamos usar el siguiente método para determinar si una colección no está vacía, es decir, si una colección contiene elementos:


Usando los atributos Longitud o Conteo, no hay problema con la escritura anterior.

Pero en la era de Linq, el método de extensión Enumerable.Count "unificaba" las propiedades Length y Count, lo que resultaba en la siguiente forma de escribir para juzgar la no nulidad:


Esta escritura está bien y funciona bien, pero puede causar problemas de rendimiento muy serios.

Ten en cuenta que es posible, pero no necesariamente, y si el método anterior se introduce como un Array<T>, Lista o <T>Colección, no habrá problema.



¿Cuándo saldrá algo mal? Veamos los siguientes métodos:


Cuando se llama:



La velocidad de ejecución será bastante lenta, y mi ordenador tardó unos 70 segundos en ejecutar el código. Count() > 0。


Si lo analizas, verás que el yield return i en la línea 5 del código GetNums se ejecuta int. ¿MaxValue, es necesario?

De hecho, mientras devuelvamos un elemento, podemos concluir que el conjunto no es vacío, y no es necesario devolver todos los elementos en absoluto.

¿Entonces, cómo juzgar? Podemos usar el método de extensión Enumerable.Any:



Modifica el método SomeAction de la siguiente manera:



Si vuelves a llamar, verás que el tiempo de ejecución es insignificante.


En resumen, Count() > 0 inevitablemente tendrá problemas de rendimiento cuando se encuentre con un retorno de yeild.






Anterior:Implementación en C# de tres temporizadores
Próximo:Cadena JS a fecha y fecha más día
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com