Delen via


De complexiteit van LINQ OrderBy.First{OrDefault} is toegenomen

De implementatie van OrderBy.First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) en OrderBy.FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) is gewijzigd, wat resulteert in een grotere complexiteit voor de bewerking.

Beschrijving wijzigen

In .NET Core 1.x - 3.x, het aanroepen van OrderBy of OrderByDescending gevolgd door First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) of FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) werkt met O(N) complexiteit. Omdat alleen het eerste (of standaard) element is vereist, is er slechts één opsomming vereist om het te vinden. Het predicaat dat aan First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) of FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) wordt geleverd, wordt echter exact N keer aangeroepen, waarbij N de lengte van de reeks is.

In .NET 5 en latere versies is een wijziging aangebracht, zodat het aanroepen van of OrderBy gevolgd door OrderByDescending of First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) werkt met FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) complexiteit in plaats van O(N log N) complexiteit. Het predicaat dat wordt geleverd aan First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) of FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) kan echter minder vaak dan N keer worden aangeroepen, wat belangrijk is voor de algehele prestatie.

Opmerking

Deze wijziging komt overeen met de implementatie en complexiteit van de bewerking in .NET Framework.

Reden voor wijziging

Het voordeel van het aanroepen van het predicaat minder keer weegt op tegen een lagere algehele complexiteit, dus de implementatie die is geïntroduceerd in .NET Core 1.0 is teruggedraaid. Zie dit probleem met dotnet/runtime voor meer informatie.

Geïntroduceerde versie

5,0

Er is geen actie van de ontwikkelaar vereist.

Betreffende API's