LINQ OrderBy.First{OrDefault}의 복잡성이 증가함
OrderBy.
First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) 및 OrderBy.
FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)의 구현이 변경되어 연산의 복잡성이 증가했습니다.
변경 내용 설명
.NET Core 1.x~3.x에서 OrderBy 또는 OrderByDescending 뒤에 First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) 또는 FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)을 호출하면 O(N)
복잡도로 연산됩니다. 첫 번째(또는 기본) 요소만 필요하므로 이를 찾는 데는 하나의 열거형만 하나만 필요합니다. 그러나 First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) 또는 FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)에 제공된 조건자가 정확히 N
번 호출됩니다. 여기서 N
은 시퀀스의 길이입니다.
.NET 5 이상 버전에서는 OrderBy 또는 OrderByDescending 뒤에 First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) 또는 FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)을 호출하면 O(N)
의 복잡도 대신 O(N log N)
의 복잡도로 연산되도록 변경이 적용되었습니다. 그러나 First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) 또는 FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)에 제공된 조건자가 N
번보다 적게 호출될 수 있는데, 이는 전체 성능에 더 중요한 영향을 줍니다.
참고 항목
이 변경 사항은 .NET Framework의 연산의 구현 및 복잡도와 일치합니다.
변경 이유
조건자를 보다 적게 호출하는 것의 이점은 전체적인 복잡도 감소의 이점을 능가하므로, .NET Core 1.0에 적용된 구현이 되돌려졌습니다. 자세한 내용은 이 dotnet/런타임 문제를 참조하세요.
도입된 버전
5.0
권장 조치
개발자는 아무 작업도 수행하지 않아도 됩니다.
영향을 받는 API
.NET