簡體   English   中英

映射需要很長時間來處理批量數據

[英]Mapping takes long time for bulk data

當我從SQL Server檢索數據時,SQL查詢窗口中的批量數據(2000000行)需要2分鍾。 但是使用dapper ORM作為列表進行映射需要很長時間(大約20分鍾或更長時間)。

有沒有想法提高映射的性能。

這是我的代碼:

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;
}

正如您在問題中解釋的那樣, var result = this.Con.Query<T>(SqlQuery,.....)行需要20分鍾才能執行。 根據您的研究,執行查詢需要2分鍾,映射需要18分鍾。

解決方案1:泵送分頁數據

映射如此龐大的數據需要時間(以及內存和處理器......),並且幾乎無法改進這一點。 考慮使用ROW_NUMBER在數據庫端進行分頁,並一次泵一頁。 正如你所說,你正在向Excel寫入數據; 所以這應該不是問題。 但這實際上會增加總時間,即使每批次時間減少,應用程序也會響應。

解決方案2:不要映射

你想寫一個Excel,對吧? 然后繞過Dapper並使用ADO.NET。 DataTable傳遞給Excel編寫器模塊。 這將是巨大的收獲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM