LINQ OrderBy.First{OrDefault} karmaşıklığı artırıldı

veFirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)OrderBy.uygulamasının OrderBy.First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) uygulanması değişti ve bu da işlemin karmaşıklığının artmasına neden oldu.

Açıklama değiştirildi

.NET Core 1.x - 3.x'te, çağrısı OrderBy veya OrderByDescending ardından First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) gelen veya FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) karmaşık bir şekilde O(N) çalışan. Yalnızca ilk (veya varsayılan) öğe gerekli olduğundan, öğeyi bulmak için yalnızca bir numaralandırma gerekir. Ancak, veya için sağlanan First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) koşul tam olarak N kez çağrılır; burada NFirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) dizinin uzunluğudur.

.NET 5 ve sonraki sürümlerde, karmaşıklık yerine çağırma veya takip etme First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) veya FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) karmaşıklık ile O(N log N) çalışma gibi bir değişiklik yapılmıştır.OrderByDescendingOrderByO(N) Ancak, verilen veya FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) birden az N kez çağrılabilir koşulFirst<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>), genel performans için daha önemlidir.

Not

Bu değişiklik , .NET Framework'teki işlemin uygulanması ve karmaşıklığıyla eşleşir.

Değişiklik nedeni

Koşulu daha az kez çağırmanın avantajı, genel karmaşıklığı daha düşük olduğu için .NET Core 1.0'da kullanıma sunulan uygulama geri döndürüldü. Daha fazla bilgi için bu dotnet/runtime sorununa bakın.

Sürüm kullanıma sunulmuştur

5.0

Geliştirici tarafından herhangi bir işlem yapılması gerekmez.

Etkilenen API’ler