¿Es una declaración LINQ más rápida que un bucle 'foreach'?

Resuelto Neil Knight asked hace 14 años • 8 respuestas

Estoy escribiendo un administrador de renderizado de malla y pensé que sería una buena idea agrupar todas las mallas que usan el mismo sombreador y luego renderizarlas mientras estoy en ese pase de sombreado.

Actualmente estoy usando un foreachbucle, pero me preguntaba si utilizar LINQ podría aumentar mi rendimiento.

Neil Knight avatar Jul 01 '10 15:07 Neil Knight
Aceptado

¿Por qué LINQ debería ser más rápido? También utiliza bucles internamente.

La mayoría de las veces, LINQ será un poco más lento porque introduce gastos generales. No utilice LINQ si le importa mucho el rendimiento. Utilice LINQ porque desea un código más corto, mejor legible y mantenible.

codymanix avatar Jul 01 '2010 08:07 codymanix

LINQ-to-Objects generalmente agregará algunos gastos generales marginales (múltiples iteradores, etc.). Todavía tiene que hacer los bucles y tiene invocaciones de delegados, y generalmente tendrá que hacer algunas desreferenciaciones adicionales para llegar a las variables capturadas, etc. En la mayoría de los códigos, esto será prácticamente indetectable y más que el código más simple de entender.

Con otros proveedores de LINQ como LINQ-to-SQL, dado que la consulta se puede filtrar en el servidor, debería ser mucho mejor que un flat foreach, pero lo más probable es que no hubieras hecho una manta "select * from foo" de todos modos , por lo que no es necesariamente justo comparación.

Re PLINQ; el paralelismo puede reducir el tiempo transcurrido , pero el tiempo total de CPU normalmente aumentará un poco debido a los gastos generales de la gestión de subprocesos, etc.

Marc Gravell avatar Jul 01 '2010 08:07 Marc Gravell

LINQ es más lento ahora, pero podría volverse más rápido en algún momento. Lo bueno de LINQ es que no tienes que preocuparte por cómo funciona. Si se idea un nuevo método que sea increíblemente rápido, la gente de Microsoft podrá implementarlo sin siquiera avisarte y tu código será mucho más rápido.

Sin embargo, lo más importante es que LINQ es mucho más fácil de leer. Ésa debería ser razón suficiente.

Jouke van der Maas avatar Jul 01 '2010 08:07 Jouke van der Maas

Probablemente debería señalarse que el forbucle es más rápido que el foreach. Entonces, para la publicación original, si le preocupa el rendimiento de un componente crítico como un renderizador, use un forbucle.

Referencia: En .NET, ¿qué bucle se ejecuta más rápido, 'for' o 'foreach'?

peewee_RotA avatar Oct 18 '2011 13:10 peewee_RotA

Es posible que obtenga un aumento de rendimiento si utiliza LINQ paralelo para múltiples núcleos. Consulte LINQ paralelo (PLINQ) (MSDN).

mcintyre321 avatar Jul 01 '2010 08:07 mcintyre321