Entradas

Mostrando las entradas de mayo, 2021

Carga de muchos datos hacia SQL Server, desde C#

Este mes me enfrenté a la carga de grandes volúmenes de datos desde C# hacia SQL Server. Millones de registros de un solo envión y en una sola transacción. Primero intenté usar Bulk Insert , pero resultó muy lento para el requerimiento. Luego intenté con Data Tables y SQL Bulk Copy , pero se reventó por memoria. Encontré la solución en una herramienta que nunca había utilizado: yield . Esta es la versión simplificada de un método que lee archivos por bloques de 1000 registros y genera Data Tables "bajo demanda" usando yield : protected   IEnumerable < DataTable >  BuildDataTableByBatches ( StreamReader   reader ,  DataColumn []  columns ) {      var   dt  =  new   DataTable ();      foreach  ( var   col   in   columns )     {          dt . Columns . Add ( col . ColumnName ,  col . DataType );     }      int   n  =  0 ;      string   line ;      while  (( line  =  reader . ReadLine ()) !=  null )     {          n ++;          var   values  =  line . Split ( "|&q