Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

324
Visualizações
Entidad 6 + PostgreSQL: rendimiento horrible

Estoy usando Entity 6 con la base de datos PostgreSQL (con conector Npgsql). Todo funciona bien, excepto por el bajo rendimiento de esta configuración. Cuando trato de insertar una cantidad no tan grande de objetos en la base de datos (alrededor de 20k registros), toma mucho más tiempo del que debería. Como esta es la primera vez que uso Entity Framework, estaba bastante confundido por qué la inserción de 20k registros en la base de datos en mi máquina local tomaría más de 1 minuto.

Para optimizar las inserciones, seguí todos los consejos que encontré. Traté de establecer AutoDetectChangesEnabled en falso, llamar a SaveChanges() cada 100 o 1000 registros, recrear el objeto de contexto de la base de datos y usar objetos DbContextTransaction (llamando a dbContext.Database.BeginTransaction() y confirmando la transacción al final de la operación o cada 100 /1000 registros). Nada mejoró el rendimiento de las plaquitas ni siquiera un poco.

Al registrar las consultas SQL generadas por Entity, finalmente pude descubrir que, independientemente de lo que haga, cada objeto se inserta por separado y cada inserción demora de 2 a 4 ms. Sin volver a crear objetos de contexto de base de datos y sin transacciones, solo hay una confirmación después de más de 20 000 inserciones. Cuando uso transacciones y confirmo cada pocos registros, hay más confirmaciones y nuevas creaciones de transacciones (lo mismo cuando vuelvo a crear el objeto de contexto DB, solo que también se restablece la conexión). Si uso transacciones y las confirmo cada pocos registros, debería notar un aumento en el rendimiento, ¿no? Pero al final no hay diferencia en el rendimiento, no importa si uso varias transacciones o no. Sé que las transacciones no mejorarán drásticamente el rendimiento, pero deberían ayudar al menos un poco. En cambio, cada inserción todavía tarda al menos 2 ms en ejecutarse en mi base de datos local.

La base de datos en la máquina local es una cosa, pero realizar la creación de 20k objetos en la base de datos remota lleva mucho, mucho, MUCHO más de un minuto: los registros indican que una sola inserción puede tardar incluso 30 ms (!), con transacciones que se confirman y crean de nuevo cada 100 o 1000 registros. Por otro lado, si ejecuto una sola inserción manualmente (tomándola directamente del registro), se tarda menos de 1 ms en ejecutarse. Parece que Entity se toma su tiempo para insertar cada objeto en la base de datos, aunque usa transacciones para envolver una mayor cantidad de inserciones. Realmente no lo entiendo...

¿Qué puedo hacer para acelerarlo de verdad?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

En caso de que a alguien le interese, encontré una solución a mi problema. Entity Framework 6 no puede proporcionar inserciones masivas rápidas sin bibliotecas de terceros adicionales (como se menciona en los comentarios a mi pregunta), que son costosas o no admiten otras bases de datos además de SQL Server. Entity Framework Core, por otro lado, es otra historia. Admite inserciones masivas rápidas y puede reemplazar EF 6 en el proyecto con solo un montón de cambios en el código: https://docs.microsoft.com/pl-pl/ef/core/index

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda