none
Mejoras del rendimiento a una aplicación web con MVC5. RRS feed

  • Pregunta

  • Hola, es mi primer pregunta en el foro y es por la siguiente problemática.

    Estoy desarrollando un sistema web de control de stock y quisiera que me guiaran en el tema del rendimiento, que para mi es muy importante. El software lo he estado desarrollando en base a tutoriales encontrados en la web, pero no me he encontrado con alguno que hable del rendimiento, y al parecer la aplicación me esta quedando demasiado lenta para cargar cuando el volumen de datos aumenta. Un ejemplo seria que cargar una tabla de todos los productos existentes en bodega (unos 4000), tarda cerca de 5 minutos.

    miércoles, 11 de enero de 2017 23:00

Respuestas

  • Williams Morales

    Segui buscando informacion y me encontre con la novedad de que estaba realizando una mala practica de programacion, colocando consultas a bases de datos dentro de los ciclos foreach, sin aprovechar las relaciones entre las tablas. Me puse a corregir en cierta parte de mi aplicativo, y para grata sorpresa el tiempo reducio de 5 min a 26 segundos. 

    Agradezco mucho tu ayuda, y tomare en cuenta tus consejos.

    Saludos.

    • Marcado como respuesta Aczanied jueves, 12 de enero de 2017 1:37
    jueves, 12 de enero de 2017 1:36

Todas las respuestas

  • Aczanied,

    ¿Cómo accedes a los datos?, ¿mediante ADO .Net o algún ORM como Entity Framework?. Si ocupas Entity Framework, ¿utilizas Linq To Entities para realizar las consultas?, de ser así, ¿consideras buenas practicas al escribir las consultas?.

    Por otro lado, independiente de la manera como accedes a los datos, en entornos web no puedes darte la libertad de recuperar varias filas en una petición, debes paginar mediante técnicas que incorporan algunas grillas, por ejemplo puedes leer el siguiente artículo [ASP.NET MVC] Utilizando el Grid.MVC paso a paso


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 11 de enero de 2017 23:14
  • Utilizo linq para realizar las consultas, y bueno no se si realizo buenas practicas, pero esta seria mas o menos una tipica sentencia:

     var products = db.Products.Include(p => p.Brand).Include(p => p.Category).Include(p => p.ProductType).ToList();
                    
     return View(products);

    miércoles, 11 de enero de 2017 23:19
  • Aczanied,

    Con sólo ver el código que adjuntas no puedo decirte si penaliza el rendimiento o no, lo que puedo recomendarte es no abusar del método Include, lo ideal es que definas un modelo (viewmodel) conteniendo todas las propiedades que la vista necesita de modo que puedas cargar los datos con una consulta mas simple basada en join, en el caso que no puedas dejar su uso lo recomendable es no tener mas de tres Include en una consulta. Todo lo dicho son sólo recomendaciones, tu debes de ver la consulta sql que genera la consulta Linq, para ello puedes utilizar SQL Server Profiler o cualquier otra herramienta, según la consulta es que debes analizar el plan de ejecución para hacer las correctivas necesarias según se considere oportuno, te dejo algunos enlaces que te ayudarán a entender el comportamiento y rendimiento del método Include:

    Entity Framework Include performance

    Entity-framework code is slow when using Include() many times

    .include () Vs .load () desempeño en ADO.NET Entity Framework

    Sin embargo, insisto en que no es correcto intentar recuperar gran cantidad de datos, revisa el enlace que te adjunte en el aporte anterior que enseña a como paginar los datos.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 12 de enero de 2017 0:09
  • Williams Morales

    Segui buscando informacion y me encontre con la novedad de que estaba realizando una mala practica de programacion, colocando consultas a bases de datos dentro de los ciclos foreach, sin aprovechar las relaciones entre las tablas. Me puse a corregir en cierta parte de mi aplicativo, y para grata sorpresa el tiempo reducio de 5 min a 26 segundos. 

    Agradezco mucho tu ayuda, y tomare en cuenta tus consejos.

    Saludos.

    • Marcado como respuesta Aczanied jueves, 12 de enero de 2017 1:37
    jueves, 12 de enero de 2017 1:36
  • Utiliza Java script , Ajax, y json,
    viernes, 13 de enero de 2017 14:29