2 puan yazan GN⁺ 2024-10-20 | 1 yorum | WhatsApp'ta paylaş

.NET 9.0 LINQ performans iyileştirmeleri

  • Span<T> kullanarak yineleme

    • .NET 9.0'da LINQ performansı büyük ölçüde iyileştirildi.
    • Dizileri Span<T> kullanarak yinelemek performansı artırır.
    • TryGetSpan() yöntemi, bir dizi veya listeyi ReadOnlySpan<T>'ye dönüştürerek yineleme hızını artırır.
  • TryGetSpan() yöntemi

    • TryGetSpan(), bir dizi veya listeyi ReadOnlySpan<T>'ye dönüştürerek yineleme performansını iyileştirir.
    • Kod optimizasyonları çok ince ayrıntı seviyesinde yapılmıştır ve performans uzmanları tarafından yazılmıştır.
    • Listenin iç dizisi değişebileceği için CollectionsMarshal.AsSpan() kullanırken dikkatli olmak gerekir.
  • TryGetSpan() çağıranlar

    • TryGetSpan() çağıran yöntemler analiz edildiğinde, birçok Enumerable yönteminin kaynak bir dizi veya liste olduğunda span kullanmayı denediği görülür.
    • yield kullanan işlemler bu optimizasyondan yararlanamaz.
  • Özelleştirilmiş yineleyiciler

    • LINQ'nun dahili IIListProvider ve IPartition tabanlı yineleyici sınıfları birleştirilerek performans iyileştirildi.
    • Belirli LINQ çağrı zincirlerini tanıyıp verimli şekilde işleyen özel yineleyiciler oluşturulur.
  • Iterator<T> ve türetilmiş sınıfların uygulanması

    • Iterator<T> soyut bir sınıftır; türetilmiş sınıflar yalnızca gerekli yöntemleri geçersiz kılar.
    • ListWhereSelectIterator<TSource, TResult>, Where(...).Select(...) zincirini tek bir yineleyici olarak işleyerek performansı artırır.
  • IListSkipTakeIterator<TSource> vaka incelemesi

    • MoveNext() yöntemi gereksiz yinelemeleri önler ve yalnızca _minIndexInclusive ile _maxIndexInclusive aralığındaki öğeleri işler.

GN⁺ özeti

  • .NET 9.0'da LINQ performansı önemli ölçüde iyileştirildi; özellikle Span<T> ve TryGetSpan() kullanımıyla yineleme performansı artırıldı.
  • LINQ'nun iç yapısı optimize edilerek belirli çağrı zincirlerini tanıyan ve bunları verimli şekilde işleyen özel yineleyiciler oluşturuldu.
  • Bu iyileştirmeler kod performansını artırmaya yardımcı olur; en güncel .NET sürümüne geçerek bu avantajlardan yararlanabilirsiniz.
  • LINQ'ya benzer işlevler sunan diğer kütüphaneler arasında System.Linq.Async de bulunur.

1 yorum

 
GN⁺ 2024-10-20
Hacker News yorumları
  • LINQ'in en kullanışlı yanı IEnumerable genişletmesi olması. Bu, C#'ın işlevsel tarzda yazılabilmesini sağlıyor

    • Haskell öğrendikten sonra LINQ'in kavramı anlaşılmış
    • Deneyimsiz bir ekip kullandığında karmaşık ve yavaş koda dönüşebiliyor
  • dotnet ekibinin araçlara neden daha fazla kaynak ayırmadığını anlamak zor

    • Belge üretimi, daha iyi unit testler ve kaynak koda erişilebilirliğin iyileştirilmesi ihtiyacından bahsediliyor
    • NuGet'teki paketlerin çoğunda dokümantasyon eksik
  • LINQ performans iyileştirmeleri, Microsoft'un kendi List<T> uygulamasının performansını iyileştirmeye odaklanıyor

    • Lambda tahsisleri ve derleme süresinin azaltılmasına yatırım yapılması gerektiği vurgulanıyor
    • LINQ değişkenlerinde wildcard desteğine ihtiyaç olduğu belirtiliyor
  • LINQ, diller arasındaki başlıca farklılaştırıcı unsurlardan biri

    • C# 3'ten beri neredeyse hiç değişmedi
    • LINQ'in yalnızca liste üzerinde yineleme için yararlı olduğunu düşünmek üzücü
  • C# ne kadar çok F#'tan bir şeyler alırsa o kadar memnuniyet verici

    • Discriminated union'ların C#'a gelmesi umuluyor
  • Başka diller kullanılırken LINQ özleniyor

    • Standart kütüphanede LINQ bulunması büyük bir avantaj
  • LINQ kullanmaya başladıktan sonra başka bir şey kullanmak zorlaşıyor

  • Kapsamlı dotnet web geliştirme öğrenme materyali bulmak zor

    • Materyallerin çoğu ya çok başlangıç seviyesinde ya da düşük kaliteli
  • Modern .NET kodundaki notasyon çok karmaşık

    • Daha iyi bir yönteme ihtiyaç var
  • .NET 9'da performans iyileştirmeleriyle ilgili bir bölüm var

    • Belirli metotlarla biten zincirlerde daha fazla optimizasyon yapılabileceği belirtiliyor
  • OrderBy(criteria).First() ifadesi Min(criteria) olarak optimize edilebilir

    • Kütüphanenin verimsiz kalıpları tanıyıp düzeltmesi olumlu