Tôi đã xem xét nguồn .NET Core để tìm hiểu xem các cuộc gọi tới IEnumerable.Last()
(LINQ) có được tối ưu hóa khi bộ sưu tập thực hiện IList
mà tôi nghi ngờ là trường hợp sau khi một số điểm chuẩn nhanh chóng. Tuy nhiên, It turns out that yes, the input is specifically checked for IList
, ngay cả trước đó, nó được kiểm tra xem đầu vào có thực hiện IPartition
hay không. IPartition
is defined here, nhưng tôi không hiểu gì cả.IPartition làm gì trong .NET Core?
mục đích IPartition
là gì và làm thế nào nó có thể có thể được nhanh hơn so với hằng số thời gian lập chỉ mục thường của IList
(hoặc nếu nó không phải là, tại sao đầu vào kiểm tra cho IPartition
sớm hơn IList
)?
Dường như nó được sử dụng bằng các phương pháp như 'Take' để tạo một tập hợp con dữ liệu. Hãy nhớ rằng nhiều phương thức linq có thể được gọi trước khi dữ liệu được nạp đầy đủ khi sử dụng 'IQueryable' và tương tự. Việc kiểm tra 'IPartition' có thể cho phép một số tối ưu hóa lén lút. –