C#

Linq의 처리속도개선 방법

지오준 2022. 6. 27.
반응형

일반적으로 Linq의 처리속도는 빠른편이 아니라서 복잡한 처리와 많은 데이터의 처리시에 속도가 느려지는 경우가 있습니다.

처리속도의 최적화를 위한 3가지 방법이 있으므로 참고해서 해보시면 좋겠습니다.

 

1. 데이터의 건수를 취득할 경우에는 Count로 결과값을 받지 않도록 합니다.

    해결방법으로는 Count의 경우에는 처리속도가 데이터가 많으면 많을수록 느려지므로 Any형태로 받는것을 추천드립니다.

IEnumerable<Class> data = //클래스선언 및 데이터설정

//데이터가 많을수록 처리속도가 느려집니다
if(data.Count() > 0)
{
	//data의 건수가 1건 이상일 경우에만 처리
}

//데이터의 처리를 최소화합니다.
if(data.Any())
{
	//data의 건수가 1건 이상일 경우에만 처리
}

2. 데이터의 취득형태를 ToArray와 ToList로 결과값을 받지 않도록 합니다.

    해결방법으로는 취득한 데이터를 foreach로 결과값을 처리할 경우에는 배열형태의 데이터는 불필요하니 필요한 조건을 추가한 IEnumerable형태로 받는것을 추천드립니다.

IEnumerable<Class> data = //클래스선언 및 데이터설정

//리스트형태 
var list = data.
    Select(r=>조건).
    Where(r=>조건).
    Distinct().
    ToList();

//foreach처리에는 리스트형태는 불필요합니다.
foreach(var l in list)
{
}

//배열형태 
var array = data.
    Select(r=>조건).
    Where(r=>조건).
    Distinct().
    ToArray();
    
//foreach처리에는 배열형태는 불필요합니다.
foreach(var l in array)
{
}

//IEnumerable형태 
var enumType = data.
    Select(r=>조건).
    Where(r=>조건).
    Distinct();

//foreach처리에는 처리조건이외의 취득타입 설정은 불필요합니다.
foreach(var l in enumType)
{
}

3. 데이터 취득시에는 Select로 항목을 먼저 선택후에 Where로 조건을 처리하지 않도록 합니다.

    해결방법으로는 Where로 조건을 설정한 후에 Select로 항목을 설정해서 불필요한 데이터를 제거한 후에 필요한 항목만을 취득하도록 합니다.

IEnumerable<Class> data = //클래스선언 및 데이터설정

//Select로 취득할 항목을 먼저 설정후에 Where로 조건에 맞는 데이터만 취득하므로 Select시에 불필요한 데이터까지 취득됩니다.
var selectwhere = data.
    Select(r=>조건).
    Where(r=>조건);

//Where로 조건에 맞는 데이터만 취득후 Select로 취득할 항목을 설정하므로 불필요한 데이터의 처리는 하지않습니다.
var whereselect = data.
    Where(r=>조건).
    Select(r=>조건);
반응형

댓글