Peningkatan Kinerja LINQ di .NET 9.0
(blog.ndepend.com)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 menjadiReadOnlySpan<T>sehingga kecepatan iterasi meningkat.
-
Metode
TryGetSpan()TryGetSpan()meningkatkan kinerja iterasi dengan mengubah array atau list menjadiReadOnlySpan<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 metodeEnumerablemencoba menggunakan span saat inputnya berupa array atau list. - Operasi yang menggunakan
yieldtidak dapat memakai optimasi ini.
- Dengan menganalisis metode yang memanggil
-
Iterator terspesialisasi
- Kinerja ditingkatkan dengan menyatukan kelas iterator berbasis
IIListProviderdanIPartitioninternal LINQ. - Iterator khusus dibuat untuk mengenali rantai pemanggilan LINQ tertentu dan menanganinya secara efisien.
- Kinerja ditingkatkan dengan menyatukan kelas iterator berbasis
-
Implementasi
Iterator<T>dan kelas turunannyaIterator<T>adalah kelas abstrak, dan kelas turunan hanya menimpa metode yang diperlukan.ListWhereSelectIterator<TSource, TResult>menangani rantaiWhere(...).Select(...)dengan satu iterator untuk meningkatkan kinerja.
-
Studi kasus
IListSkipTakeIterator<TSource>- Metode
MoveNext()menghindari iterasi yang tidak perlu dan hanya memproses elemen dalam rentang_minIndexInclusivedan_maxIndexInclusive.
- Metode
Ringkasan GN⁺
- Kinerja LINQ meningkat secara signifikan di .NET 9.0, terutama dengan penggunaan
Span<T>danTryGetSpan()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
Komentar Hacker News
Bagian LINQ yang paling berguna adalah ekstensi
IEnumerable. Ini memungkinkan penulisan C# dengan gaya fungsionalSulit memahami mengapa tim dotnet tidak menginvestasikan lebih banyak sumber daya ke tooling
Peningkatan performa LINQ berfokus pada peningkatan performa implementasi
List<T>milik Microsoft sendiriLINQ adalah salah satu faktor pembeda utama antarbahasa
Semakin banyak C# meminjam dari F#, semakin memuaskan hasilnya
Saat menggunakan bahasa lain, LINQ terasa dirindukan
Begitu mulai menggunakan LINQ, jadi sulit memakai hal lain
Sulit menemukan materi pembelajaran web development dotnet yang benar-benar komprehensif
Anotasi pada kode Net modern terlalu rumit
Ada bagian terkait peningkatan performa di .NET 9
OrderBy(criteria).First()dapat dioptimalkan menjadiMin(criteria)