Este ejemplo muestra 2 grids de Kendo cargados por Ajax. Ambas han cargado las poblaciones españolas desde BBDD (aquí).
La primera ha mapeado (con ayuda de AutoMapper) recorriendo en un bucle el modelo generado por EF con un foreach clásico.
La segunda ha mapeado (con ayuda de AutoMapper) recorriendo en un bucle el modelo generado por EF con un foreach paralelo.
Como se puede observar (en depuración para el uso de una máquina de 4 núcleos y 16 GB RAM), el 2º grid carga más rápido que el el 1º.
Además, siendo el 2º campo el Id del hilo que gestiona la iteración en cada grid, en el caso del "Foreach clásico" todo el bucle de mapeo se recorre en el mismo hilo al contrario que en el paralelo.
Parallel.ForEach (desde .NET 4.0) presenta una nueva forma para recorrer colecciones de forma paralela de forma más rápida, esto es:
Una excelente explicación de las ventajas e inconvenientes para su utilización se puede ver én el siguiente documento o en esta dirección.
Las entidades del EF no permiten recorrer los modelos generados en el contexto puesto que dicho contexto de EF funciona como una única unidad de trabajo y no se puede instanciar en varios hilos (más información aquí).
Cuando tratamos muchos datos podemos al menos mapear el ViewModel recorriendo de forma paralela nuestro modelo del contexto volcado en memoria.
Se ha utilizado Visual Studio
Express 2013 para Web y actualmente Visual Comunity 2015.
La programación se ha desarrollado con C#, Razor y acceso a Base de Datos por Entity Framework.
Las tablas mostradas en la aplicación se encuentran en un Microsoft® SQL Server® 2012 y actualmente en SQL de Azure
El alojamiento de las páginas se realizó en https://www.smarterasp.net con el plan .NET ADVANCE
y actualmente se han movido a 2 Aplicaciones Web en Azure: una para
este proyecto Web MVC y otra para un WCF usada en un ejemplo.
Se ha testeado con exito en diferentes navegadores y sistemas operativos, en pantallas de PC, tabletas y moviles.