Tôi đang sử dụng LINQ to Objects và tự hỏi liệu có thể cải thiện hiệu suất truy vấn của tôi bằng cách sử dụng chỉ mục mà tôi có. Điều này được giải thích tốt nhất với một ví dụ. Hãy tưởng tượng một kiểu đơn giản ...LINQ to Objects và cải thiện perf với chỉ mục?
public class Person
{
public int Age;
public string FirstName;
public string LastName;
}
Và một truy vấn đơn giản, tôi sẽ làm cho chống lại nó ...
List<Person> people = new List<Person>();
// 'people' populated with 50,000 instances...
var x = from t in people
where t.Age > 18 && t.Age < 21
select t;
Nếu tôi hiểu LINQ to Objects một cách chính xác sau đó thực hiện các trường hợp phương pháp khuyến nông sẽ liệt kê tất cả 50.000 trường hợp trong bộ sưu tập người để tìm 100 thực sự phù hợp. Khi điều đó xảy ra, tôi đã có chỉ mục của bộ sưu tập người được sắp xếp theo Độ tuổi. Như thế này ...
SortedList<int, Person> ageSorted = new SortedList<int, Person>();
Rõ ràng nó sẽ có ý nghĩa nếu tôi có thể có được ở đâu để sử dụng SortedList để nó không còn phải liệt kê tất cả 50.000 trường hợp, thay vì tìm kiếm khoảng 100 mục tương ứng và do đó tiết kiệm thời gian.
Có thể mở rộng LINQ to Objects để kích hoạt tình huống của tôi không? Là nó đã có thể nhưng tôi thiếu kỹ thuật?
Cảm ơn. Điều đó chắc chắn sẽ làm công việc tôi hy vọng đạt được. –
@PhilWright, @JohnSkeet Có một phương thức 'List.BinarySearch' có thể được sử dụng trong đoạn mã trên, với sửa đổi nhỏ về chữ ký phương thức. BTW, có một tìm kiếm nhị phân trên danh sách được sắp xếp là tốt: 'SortedList.IndexOfKey'. –
BTW, 'List.BinarySearch' có thể được sử dụng để tìm đối sánh gần nhất trong trường hợp khớp chính xác không tồn tại. Thật kỳ lạ, 'SortedList.IndexOfKey' dường như không có khả năng này. –