xem xét mã này:Hiểu được mở rộng elementAt (index)
int size = 100 * 1000 * 1000;
var emu = Enumerable.Range(0, size);
var arr = Enumerable.Range(0, size).ToArray();
khi tôi gọi emu.ElementAt (size-10) và arr.ElementAt (size-10) và đo thời gian arr là nhanh hơn nhiều (mảng là 0,0002 so với IE9 có thể đếm được).
Theo tôi được biết, phương pháp gia hạn elementAt() có chữ ký
public static TSource ElementAt<TSource>(this IEnumerable<TSource> source, int index)
và kể từ khi 'nguồn' là một IEnumerable logic thực hiện sẽ tương tự như - trái ngược với những gì tôi nhìn thấy nơi các mảng được truy cập trực tiếp.
Ai đó có thể xin giải thích này :)
Bạn có thể gián tiếp chọn tham gia vào các tối ưu hóa bằng cách có kiểu bộ sưu tập tùy chỉnh của bạn thực hiện 'IList', nhưng thực hiện nó một cách rõ ràng và/hoặc chỉ hiển thị công khai bộ sưu tập của bạn là 'IEnumerable '. Nếu bạn muốn, bạn có thể cung cấp một giao diện tùy chỉnh cho mỗi phương thức mở rộng tùy chỉnh cho phép một nhà văn lớp ghi đè hành vi của phương thức mở rộng, mặc dù điều này có thể hơi lộn xộn. (tiện ích con Widget này) 'và' WidgetExtensions.IToggleWidget '. –