es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

EF Core 6: la inspección a través del perfilador es impactante.

He inspeccionado EF Core 6 a través del SQL Server Profiler, lo cual es sorprendente desde el punto de vista del rendimiento.

Aquí no se realiza ningún perfilado, lo cual es muy bueno:

var user = App.Ctx.LoginUsers;

Este código tampoco se perfila, lo cual también es muy bueno:

user = App.Ctx.LoginUsers;

Aquí, el código se perfila, lo cual también es bueno:

var users = App.Ctx.LoginUsers.ToList();

Pero con este código, cuando se perfila, es muy malo porque ya se encuentra en la memoria del contexto:

users = App.Ctx.LoginUsers.ToList();

Si cada consulta se realiza al servidor de SQL, incluso si está en la memoria del contexto, ¿el rendimiento será desastroso?


Pero esperábamos hacer una consulta a SQL Server únicamente para los datos diferenciales que han cambiado:

  1. Insertados para añadirse a la memoria del contexto de la base de datos
  2. Solo modificados para actualizar en la memoria del contexto de la base de datos
  3. Y solo eliminados para eliminarlos de la memoria del contexto de la base de datos.

Y proporcionar los datos solicitados desde la memoria del contexto de la base de datos.

De esta manera, pensamos que el rendimiento se habría mejorado drásticamente.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en SQL Server, Entity Framework Core, C# 6.0 y SQL Server Profiler, he inspeccionado EF Core 6 a través de SQL Server Profiler y encontrado resultados impactantes desde el punto de vista del rendimiento. Sin embargo, también he observado que algunos códigos no necesitan hacer una llamada al servidor de SQL, lo cual es bueno para el rendimiento.

    Por ejemplo, el código var user = App.Ctx.LoginUsers; y user = App.Ctx.LoginUsers; no necesitan ser perfilados ya que no involucran ninguna operación de base de datos, lo cual es excelente para el rendimiento.

    Por otro lado, el código var users = App.Ctx.LoginUsers.ToList(); es perfilado, lo cual indica que involucra una operación de base de datos para recuperar datos. Sin embargo, sigue siendo una buena práctica ya que recupera datos solo cuando es necesario.

    Pero, el código users = App.Ctx.LoginUsers.ToList(); es perfilado como muy malo para el rendimiento porque recupera todos los datos de la base de datos incluso si ya se encuentran en la memoria del contexto.

    Para mejorar el rendimiento, esperamos hacer una llamada al servidor de SQL solamente para los datos diferenciales que han sido modificados, como los datos insertados, modificados o eliminados. Para los datos solicitados, podemos proporcionarlos desde la memoria del DbContext, lo cual aumentaría drásticamente el rendimiento.

Comments are closed.