Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

310
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!