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 N
FirstOrDefault<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
Önerilen eylem
Geliştirici tarafından herhangi bir işlem yapılması gerekmez.
Etkilenen API’ler
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin