Optimizando tus endpoints GET de Entity Framework con AsNoTracking
Optimiza tu API RESTful haciendo sus lecturas tres veces más rapido, además te muestro las pruebas ✌️🐿️

AsNoTracking es un método de extensión provisto por Entity Framework Core y que puedes (y deberías) utilizar en todas tus API RESTful,y tu dirás, dónde? en todos tus endpoints que sean de LECTURA.

Algo así:

        [HttpGet]
        public async Task<List<Autor>> Get()
        {
            return await context.Autores.AsNoTracking().ToListAsync();
        }

Como podrás ver consiste simplemente en añadirlo luego de traer los datos de la base de datos.

Profundicemos...

El AsNoTracking indica al Entity Framework a ignorar el seguimiento de las entidades obtenidas mediante una consulta. Esto significa que EF no las guardará en su caché, no controlará sus modificaciones ni las asociará con un contexto.

Definitivamente esta medida puede ahorrarte mucho tiempo y recursos, especialmente al enfrentar consultas extensas o complejas.

Si tu método tiene operaciones de lectura y escritura o sólo de escritura como podría ser un POST, PUT o DELETE, o un GET en el cual también hagas operaciones de escritura, no deberías añadir AsNoTracking ya que este ayuda a mantener la consistencia y la integridad de los datos.

Comprobándolo 🧐

Como me dió curiosidad esta optimización que tanto se habla en todos los círculos técnicos y de redes sociales, entonces decidí medir el rendimiento cuando uno usa y no usa el dichoso AsNoTracking.

Si quieres aprender cómo hacer mediciones de rendimiento en .NET aquí te lo explico fácil.

Medición del rendimiento

Te lo explico, para medir el rendimiento utilicé la librería BenchmarkDotNet

He creado dos métodos GET, los cuales hacen una consulta a una tabla en la base de datos.

He insertado 100 mil registros a dicha tabla:

Si te estás preguntando por esa forma de obtener el contexto es por cuestiones de medición de rendimiento que ves a la variable dbContext allí en el método, normalmente se inyecta. Just in case!

En la tabla de resultados, a lo que debes prestar atención es a las columnas Mean y Allocated

  • Mean: Tiempo promedio que tarda la ejecución del método
  • Allocated: Memoria asignada durante la ejecución del método

Como podrás ver el método con AsNoTracking tiene mejores resultados.

Tenemos un rendimiento más de tres veces mejor respecto al otro, así que no hay duda de su efectividad al optimizar los métodos cuando se trata de obtener data con el verbo HTTP GET.

Y nada mejor que poder comprobar, esa milla extra es lo que te convertirá de un programador promedio a un programador excepcional.

Comparte esta entrada capo 😎✌️

Créditos de la imagen de portada: Foto de Paul Harris en Unsplash

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *