Estoy buscando hacer uso de las ventajas de la programación paralela en linq mediante el uso de plinq, no estoy seguro de entender el uso completamente aparte del hecho de que va a hacer uso de todos los núcleos de la CPU de manera más eficiente, por lo que para una consulta más grande podría ser más rápido. ¿Puedo simplemente llamar a AsParallel() en llamadas de linq para hacer uso de la funcionalidad de eplinq y siempre será más rápido? ¿O debería usarlo solo cuando hay una gran cantidad de datos para consultar o procesar?Cuando debería usar AsParallel() en linq/plinq
Respuesta
No puede suponer que la ejecución en paralelo siempre es más rápida. Depende. En algunas situaciones ganarás mucho en procesadores multi-core haciendo cosas en paralelo. En otros casos, simplemente ralentizará las cosas, ya que los bucles paralelos tienen un pequeño sobrecalentamiento sobre bucles simples.
Por ejemplo, vea my other answer que explica por qué los bucles paralelos incrustados pueden ser un desastre.
Ahora, la mejor manera de saber si es una buena idea usar un bucle paralelo en un contexto preciso es para probar tanto en implementaciones paralelas como no paralelas y para medir el tiempo que toman.
Para agregar más a la respuesta, también depende de sus datos. Yendo un poco a la "vieja escuela" por un momento, podrías ir por el camino de desenrollar bucles, usar para en lugar de foreach, y así sucesivamente.
Sin embargo, realmente necesita asegurarse de que no está optimizando en micro. Dependiendo de sus búsquedas de datos y del tamaño de los datos (ciertamente con datos paginados), entonces probablemente pueda salirse con la suya sin usarlos.
Eso no quiere decir que hacer que tu linq mult-core sea consciente no es genial. Pero tenga en cuenta los costos de configuración de hacer algo así y así poder sopesar los beneficios contra las complejidades de mantener y depurar ese código.
Si su algoritmo ya es de primera categoría y luego observa las extensiones plinq, un mecanismo de reducción de mapa o similar puede ser el camino a seguir. Pero primero revise su algoritmo y sus beneficios generales. Operar en el tipo correcto de colección (etc.) del modo correcto siempre traerá sus propios beneficios (¡y problemas!).
¿Qué estás tratando de resolver?
- 1. ¿Parallel.ForEach requiere AsParallel()
- 2. cuando debería usar _mm_sfence _mm_lfence y _mm_mfence
- 3. Explique por favor AsParallel()
- 4. ¿Cómo funciona exactamente AsParallel?
- 5. En Jira Agile cuando debería usar una "Historia" y cuándo debería usar una "Mejora"
- 6. cuando debería usar un ordenado en lugar de un diccionario
- 7. AsParallel estrellarse una aplicación MonoTouch
- 8. ¿Por qué debería usar WndProc cuando tengo eventos de formulario?
- 9. ¿Cuándo debería usar # en ColdFusion?
- 10. ¿Cuándo debería usar CompiledQuery?
- 11. ¿Qué Python debería usar?
- 12. ¿Cuándo debería usar GC.SuppressFinalize()?
- 13. ¿Cuándo debería usar ConcurrentSkipListMap?
- 14. ¿Cuándo debería usar _aligned_malloc()?
- 15. ¿Cuándo debería usar semáforos?
- 16. ¿Debería siempre usar GL_CULL_FACE?
- 17. Cuándo debería usar SynchronousQueue
- 18. Cuándo debería usar "prototype" en JavaScript
- 19. ¿Cuándo debería usar SnapsToDevicePixels en WPF 4.0?
- 20. En SQL Server, ¿cuándo debería usar GO y cuándo debería usar punto y coma?
- 21. Cuándo debería usar paréntesis en knockout
- 22. ¿Cuándo debería usar try/catch en JavaScript?
- 23. cuál de == y =: = debería usar?
- 24. ¿Cuándo debería usar assign en Objective c?
- 25. ¿Cuándo debería usar transacciones en mis consultas?
- 26. ¿Cuándo debería usar deftype en Clojure?
- 27. ¿Por qué no debería usar DISTINCT cuando podría usar GROUP BY?
- 28. ¿Qué IronPython IDE debería usar?
- 29. ¿Por qué debería usar MXML?
- 30. ¿Cuándo debería usar stdClass y cuándo debería usar una matriz en php oo?