Các cải tiến hiệu năng LINQ trong .NET 9.0
(blog.ndepend.com)Cải tiến hiệu năng LINQ trong .NET 9.0
-
Lặp với
Span<T>- Trong .NET 9.0, hiệu năng của LINQ đã được cải thiện đáng kể.
- Khi lặp qua mảng bằng
Span<T>, hiệu năng được nâng cao. - Sử dụng phương thức
TryGetSpan()để chuyển mảng hoặc danh sách thànhReadOnlySpan<T>, từ đó tăng tốc độ lặp.
-
Phương thức
TryGetSpan()TryGetSpan()chuyển mảng hoặc danh sách thànhReadOnlySpan<T>để cải thiện hiệu năng lặp.- Việc tối ưu mã được thực hiện ở những chi tiết rất nhỏ, và đây là phần mã do các chuyên gia hiệu năng viết.
- Mảng nội bộ của danh sách có thể thay đổi, nên cần cẩn trọng khi dùng
CollectionsMarshal.AsSpan().
-
Các bên gọi
TryGetSpan()- Bằng cách phân tích các phương thức gọi
TryGetSpan(), có thể thấy nhiều phương thứcEnumerablesẽ cố gắng dùng span khi đầu vào là mảng hoặc danh sách. - Các phép toán sử dụng
yieldkhông thể dùng tối ưu hóa này.
- Bằng cách phân tích các phương thức gọi
-
Trình lặp chuyên biệt
- Hiệu năng được cải thiện bằng cách hợp nhất các lớp trình lặp dựa trên
IIListProvidervàIPartitionnội bộ của LINQ. - Tạo ra các trình lặp chuyên biệt để nhận diện và xử lý hiệu quả các chuỗi gọi LINQ cụ thể.
- Hiệu năng được cải thiện bằng cách hợp nhất các lớp trình lặp dựa trên
-
Triển khai
Iterator<T>và các lớp dẫn xuấtIterator<T>là một lớp trừu tượng, còn các lớp dẫn xuất chỉ ghi đè những phương thức cần thiết.ListWhereSelectIterator<TSource, TResult>xử lý chuỗiWhere(...).Select(...)bằng một trình lặp duy nhất để cải thiện hiệu năng.
-
Nghiên cứu trường hợp
IListSkipTakeIterator<TSource>- Phương thức
MoveNext()tránh các lần lặp không cần thiết và chỉ xử lý các phần tử trong phạm vi_minIndexInclusivevà_maxIndexInclusive.
- Phương thức
Tóm tắt của GN⁺
- Trong .NET 9.0, hiệu năng LINQ đã được cải thiện đáng kể, đặc biệt là bằng cách sử dụng
Span<T>vàTryGetSpan()để tăng hiệu năng lặp. - Cấu trúc nội bộ của LINQ đã được tối ưu hóa để nhận diện các chuỗi gọi cụ thể và tạo ra các trình lặp chuyên biệt nhằm xử lý hiệu quả hơn.
- Những cải tiến này giúp nâng cao hiệu năng của mã, và bạn có thể tận dụng các lợi ích đó bằng cách di chuyển sang phiên bản .NET mới nhất.
- Một thư viện khác cung cấp chức năng tương tự LINQ là
System.Linq.Async.
1 bình luận
Ý kiến trên Hacker News
Phần hữu ích nhất của LINQ là các phần mở rộng
IEnumerable. Điều này cho phép viết C# theo phong cách hàmKhông thể hiểu nổi vì sao đội ngũ dotnet không đầu tư thêm nguồn lực vào công cụ
Các cải tiến hiệu năng LINQ đang tập trung vào việc cải thiện hiệu năng của chính triển khai
List<T>của MicrosoftLINQ là một trong những yếu tố khác biệt chính giữa các ngôn ngữ
C# càng vay mượn nhiều từ F# thì càng khiến tôi hài lòng
Khi dùng các ngôn ngữ khác, tôi nhớ LINQ
Một khi đã bắt đầu dùng LINQ thì khó quay lại dùng thứ khác
Rất khó tìm được tài liệu học phát triển web dotnet một cách toàn diện
Chú thích trong mã Net hiện đại quá phức tạp
Có một mục liên quan đến các cải tiến hiệu năng trong .NET 9
OrderBy(criteria).First()có thể được tối ưu thànhMin(criteria)