El mapeo toma mucho tiempo para datos masivos

asp.net-mvc c# dapper sql-server

Pregunta

Cuando recupero datos de SQL Server, toma 2 minutos para datos masivos (2000000 filas) en la ventana de consulta SQL. Pero lleva mucho tiempo (aproximadamente 20 minutos o más) mapear como una lista usando el ordenado ORM.

¿Hay alguna idea de aumentar el rendimiento en el mapeo?

Este es mi código:

public List<T> DapperToList<T>(string SqlQuery, CommandType? CommandType = null) where T : class
{
    if (Con.State == ConnectionState.Open)
        Con.Close();

    Con.Open();

    var result = this.Con.Query<T>(SqlQuery, null, null, true, int.MaxValue, CommandType).ToList();

    Con.Close();

    return result;
}

public List<LOG_REPORTS> REPORT_LOG(DateTime? FROMDATE, DateTime? TODATE)
{
    DynamicParameters param = new DynamicParameters();

    param.Add("@FROMDATE", FROMDATE, DbType.DateTime);
    param.Add("@TODATE", TODATE, DbType.DateTime);

    var lstt = db.DapperToList<LOG_REPORTS>("PROC_LOG_REPORTS", param, CommandType.StoredProcedure);

    return lstt;
}

Respuesta aceptada

Como explicó en la pregunta var result = this.Con.Query<T>(SqlQuery,.....) línea tarda 20 minutos en ejecutarse. Según su investigación, 2 minutos para ejecutar la consulta y los restantes 18 minutos para el mapeo.

Solución 1: Datos paginados de la bomba

Mapear datos tan grandes llevará tiempo (y memoria y procesador y ...) y hay casi ningún ámbito para mejorar esto. Considere ROW_NUMBER en el lado de la base de datos usando ROW_NUMBER y bombee una página a la vez. Como dijiste, estás escribiendo datos en Excel; así que esto no debería ser un problema. Pero esto realmente aumentará el tiempo total aunque se reducirá el tiempo por lote y la aplicación responderá.

Solución 2: NO mapa

Quieres escribir un Excel, ¿verdad? luego elude a Dapper y usa ADO.NET. Pase el módulo de escritor de DataTable a Excel. Esto será una gran ganancia.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué