Nó chứa tối ưu hóa cho bất kỳ thứ gì triển khai IList<T>
trong trường hợp này, nó chỉ tìm kiếm mục ở độ dài -1.
Hãy ghi nhớ rằng đại đa số những thứ bạn sẽ sai đến nhân sẽ thực hiện IList<T>
List<int>
int[]
và vân vân ... tất cả thực hiện IList<T>
Đối với những người không thể nhìn vào mã để xác nhận, bạn có thể khẳng định nó bằng cách quan sát:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace ConsoleApplication4 {
class Program {
static void Profile(string description, int iterations, Action func) {
// clean up
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
// warm up
func();
var watch = Stopwatch.StartNew();
for (int i = 0; i < iterations; i++) {
func();
}
watch.Stop();
Console.Write(description);
Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
}
static void Main(string[] args) {
int[] nums = Enumerable.Range(1, 1000000).ToArray();
int a;
Profile("Raw performance", 100000,() => { a = nums[nums.Length - 1]; });
Profile("With Last", 100000,() => { a = nums.Last(); });
Console.ReadKey();
}
}
}
Output:
0.123.
Raw performance Time Elapsed 1 ms
With Last Time Elapsed 31 ms
Vì vậy, nó chỉ chậm hơn 30 lần và duy trì hồ sơ hiệu suất đó với bất kỳ danh sách độ dài nào bạn có, không có gì trong sơ đồ lớn của sự vật.
Nguồn
2009-09-04 08:16:00
Cây thừa kế nào cho trình vòng lặp? C++ không có các phương thức mở rộng ở vị trí đầu tiên, vì vậy 'end()' trên 'vector' được thực hiện đơn giản từ' list', và bất kỳ thứ gì muốn làm việc với các trình vòng lặp cho cả hai phải là một khuôn mẫu ' 'on' Iterator' loại tham số. –