Share via


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