2017-05-18 1 views
1

SQL Server에서 데이터를 검색 할 때 SQL 쿼리 창에서 대량 데이터 (2000000 행)의 경우 2 분이 걸립니다. 그러나 ORM을 사용하여 목록으로 매핑하는 데 오랜 시간이 걸립니다 (약 20 분 이상).대량 데이터의 매핑에 많은 시간이 걸립니다.

매핑의 성능을 향상시킬 생각은 없나요? 당신이 var result = this.Con.Query<T>(SqlQuery,.....) 라인이 실행 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; 
} 
+0

어 ... 2 000 000 개의 레코드를로드해야합니까? –

+0

예. 네 번. – achu

+0

그리고이 양의 데이터로 무엇을합니까? –

답변

0

:

내 코드입니다. 연구 결과에 따라 쿼리 실행 2 분, 매핑 18 분 남음

용액 1 : 펌프 시간 (메모리 및 프로세서 ...)를 취한다 데이터

매핑 같은 거대한 데이터를 페이징이 향상하는 범위가없는 근처에있다. ROW_NUMBER을 사용하여 데이터베이스 측에서 페이징을 고려하고 한 번에 한 페이지 씩 펌프하십시오. Excel에 데이터를 쓰고 있다고 말했듯이; 그래서 이것은 문제가되어서는 안됩니다. 그러나 이것은 일괄 처리 시간이 줄어들고 응용 프로그램이 응답 할지라도 실제로 총 시간을 증가시킵니다.

해결 방법 2 : 바로, 당신은 Excel을 기록 할

을지도하지 마십시오? Dapper를 우회하여 ADO.NET을 사용하십시오. DataTable을 Excel 기록기 모듈에 전달하십시오. 이것은 큰 이득이 될 것입니다.

+0

괜찮습니까. 고맙습니다. – achu

관련 문제