Mejorando el performance de tu app, trabajar con ConcurrentBag

Una aplicación puede tener un performance o rendimiento que no sean los óptimos por muchos motivos, pero uno de ellos puede ser el hecho de no trabajar bien con procesos que podrían paralelizarse y no se paralelizan.

En caso de paralelizar procesos además hay que tener en cuenta que tu aplicación va a trabajar con diferentes hilos, y que no todos los elementos de C# son seguros al ser manejados por diferentes hilos paralelos.

A continuación presento por qué usar ConcurrentBag, un elemento que implementa IEnumerable como pueda ser List, y que deberá sustituir a List si las vas a necesitar en un proceso con hilos paralelos que tienen subprocesos.

Leer más…

Mejorando el performance de tu app, trabajar con procesos en paralelo

En ocasiones es posible que tu aplicación este sufriendo un mal rendimiento como consecuencia de hacer diferentes procesos secuenciales sin que realmente exista una dependencia entre ellos.

Estos procesos son firmes candidatos a ser usados en paralelos en diferentes subprocesos de tu proceso principal, de forma que el tiempo que tu proceso principal tarda en ejecutarse sea igual al tiempo del peor de los subprocesos, y no una suma secuencial de los tiempos de cada subproceso.

A continuación te presento como hacer esto de forma simple. 

Leer más…

Cómo hacer Unit Test sobre EF DbContext

En anteriores entradas he presentado mecanismos para hacer Unit Test sobre métodos de lógica genéricos, que suelen ubicarse en una capa de dominio, y Flow Expectation Test sobre la capa de servicio. Ahora voy a presentarte la manera de hacer Unit Test sobre tu capa de datos.

En esta entrada presento una arquitectura que usa un patrón de diseño con Unit Of Work y Reposity Pattern. En esta otra entrada escribí sobre Rhino Mock como una de mis librerías favoritas para Unit Testing. Ahora voy a combinar ambas para hacer unit test a tus métodos de Unit Of Work, pudiendo simular una colección de datos en memoria como si de un acceso a base de datos se tratase, de forma que puedas probar tus métodos con consultas linq y testear así su resultado, siendo capaz de aproximarte cada vez al valioso TDD del que hablo en esta entrada.

Leer más…