2 poin oleh GN⁺ 2024-10-20 | 1 komentar | Bagikan ke WhatsApp

Peningkatan kinerja LINQ di .NET 9.0

  • Iterasi menggunakan Span<T>

    • Kinerja LINQ meningkat secara signifikan di .NET 9.0.
    • Mengiterasi array dengan Span<T> meningkatkan performa.
    • Metode TryGetSpan() digunakan untuk mengubah array atau list menjadi ReadOnlySpan<T> sehingga kecepatan iterasi meningkat.
  • Metode TryGetSpan()

    • TryGetSpan() meningkatkan kinerja iterasi dengan mengubah array atau list menjadi ReadOnlySpan<T>.
    • Optimasi kode dilakukan pada bagian-bagian kecil, dan ini adalah kode yang ditulis oleh para ahli performa.
    • Karena array internal list dapat berubah, penggunaan CollectionsMarshal.AsSpan() perlu dilakukan dengan hati-hati.
  • Pemanggil TryGetSpan()

    • Dengan menganalisis metode yang memanggil TryGetSpan(), terlihat bahwa banyak metode Enumerable mencoba menggunakan span saat inputnya berupa array atau list.
    • Operasi yang menggunakan yield tidak dapat memakai optimasi ini.
  • Iterator terspesialisasi

    • Kinerja ditingkatkan dengan menyatukan kelas iterator berbasis IIListProvider dan IPartition internal LINQ.
    • Iterator khusus dibuat untuk mengenali rantai pemanggilan LINQ tertentu dan menanganinya secara efisien.
  • Implementasi Iterator<T> dan kelas turunannya

    • Iterator<T> adalah kelas abstrak, dan kelas turunan hanya menimpa metode yang diperlukan.
    • ListWhereSelectIterator<TSource, TResult> menangani rantai Where(...).Select(...) dengan satu iterator untuk meningkatkan kinerja.
  • Studi kasus IListSkipTakeIterator<TSource>

    • Metode MoveNext() menghindari iterasi yang tidak perlu dan hanya memproses elemen dalam rentang _minIndexInclusive dan _maxIndexInclusive.

Ringkasan GN⁺

  • Kinerja LINQ meningkat secara signifikan di .NET 9.0, terutama dengan penggunaan Span<T> dan TryGetSpan() untuk mempercepat iterasi.
  • Struktur internal LINQ dioptimalkan untuk mengenali rantai pemanggilan tertentu dan membuat iterator khusus yang menanganinya secara efisien.
  • Peningkatan ini membantu menaikkan performa kode, dan Anda bisa memperoleh manfaatnya dengan bermigrasi ke versi .NET terbaru.
  • Pustaka lain yang menyediakan fungsi serupa LINQ adalah System.Linq.Async.

1 komentar

 
GN⁺ 2024-10-20
Komentar Hacker News
  • Bagian LINQ yang paling berguna adalah ekstensi IEnumerable. Ini memungkinkan penulisan C# dengan gaya fungsional

    • Setelah mempelajari Haskell, konsep LINQ jadi bisa dipahami
    • Jika digunakan oleh tim yang kurang berpengalaman, hasilnya bisa menjadi kode yang rumit dan lambat
  • Sulit memahami mengapa tim dotnet tidak menginvestasikan lebih banyak sumber daya ke tooling

    • Disebutkan perlunya pembuatan dokumentasi, unit test yang lebih baik, dan peningkatan aksesibilitas source code
    • Sebagian besar paket di NuGet kekurangan dokumentasi
  • Peningkatan performa LINQ berfokus pada peningkatan performa implementasi List<T> milik Microsoft sendiri

    • Ditekankan perlunya investasi untuk mengurangi alokasi lambda dan waktu kompilasi
    • Disebutkan perlunya dukungan wildcard untuk variabel LINQ
  • LINQ adalah salah satu faktor pembeda utama antarbahasa

    • Hampir tidak ada perubahan sejak C# 3
    • Sangat disayangkan jika LINQ dianggap hanya berguna untuk iterasi list
  • Semakin banyak C# meminjam dari F#, semakin memuaskan hasilnya

    • Berharap discriminated union akan diperkenalkan ke C#
  • Saat menggunakan bahasa lain, LINQ terasa dirindukan

    • Kehadiran LINQ di standard library adalah keunggulan besar
  • Begitu mulai menggunakan LINQ, jadi sulit memakai hal lain

  • Sulit menemukan materi pembelajaran web development dotnet yang benar-benar komprehensif

    • Sebagian besar materi terlalu dasar atau kualitasnya rendah
  • Anotasi pada kode Net modern terlalu rumit

    • Dibutuhkan cara yang lebih baik
  • Ada bagian terkait peningkatan performa di .NET 9

    • Disebutkan bahwa lebih banyak optimasi dimungkinkan pada chain yang berakhir dengan metode tertentu
  • OrderBy(criteria).First() dapat dioptimalkan menjadi Min(criteria)

    • Positif bahwa library dapat mengenali dan memperbaiki pola yang tidak efisien