Tôi đang viết Intellisense/Tự động hoàn thành giống như bạn tìm thấy trong Visual Studio. Tất cả đều ổn cho đến khi danh sách có thể chứa hơn 2000 mục.Cách nhanh nhất để lọc danh sách các chuỗi khi tạo danh sách Intellisense/Autocomplete là gì?
Tôi đang sử dụng một tuyên bố LINQ đơn giản để thực hiện việc lọc:
var filterCollection = from s in listCollection
where s.FilterValue.IndexOf(currentWord,
StringComparison.OrdinalIgnoreCase) >= 0
orderby s.FilterValue
select s;
sau đó tôi gán bộ sưu tập này để ItemSource một WPF Listbox, và đó là kết thúc của nó, hoạt động tốt.
Lưu ý rằng, Listbox cũng được ảo hóa, vì vậy sẽ chỉ có tối đa 7-8 yếu tố trực quan trong bộ nhớ và trong cây thị giác. Tuy nhiên, trước khi báo trước là khi người dùng gõ cực nhanh trong richtextbox, và trên mọi khóa, tôi thực thi lọc + ràng buộc, có điều kiện bán chạy này, hoặc lọc đồng bộ, chẳng hạn như lần đầu tiên bộ lọc chính của đột quỵ vẫn có thể thực hiện công việc lọc hoặc ràng buộc của nó, trong khi đột quỵ quan trọng thứ tư cũng làm như vậy.
Tôi biết tôi có thể trì hoãn trước khi áp dụng bộ lọc, nhưng tôi đang cố gắng đạt được một bộ lọc liền mạch giống như bộ lọc trong Visual Studio. Tôi không chắc chắn vấn đề của mình nằm ở đâu, vì vậy tôi cũng gán nó vào hoạt động chuỗi của IndexOf, hoặc có lẽ danh sách chuỗi của tôi có thể được tối ưu hóa trong một số loại chỉ mục, có thể tăng tốc độ tìm kiếm.
Bất kỳ đề xuất nào về mẫu mã đều được hoan nghênh nhiều.
Cảm ơn.
Bạn đã xác minh rằng đây thực sự là nút cổ chai? Tôi chỉ tò mò nếu có mã khác có thể được đóng góp và không có hồ sơ bạn không thể chắc chắn nơi nút cổ chai là. +1 nhân tiện, tôi thích những câu hỏi như thế này –
Hey Andrew, tôi rất vui vì tôi đã hỏi một câu hỏi khai sáng :). Nó chỉ là một giả định, tôi ám chỉ để lọc hoặc ràng buộc với điều khiển đó là nút cổ chai. Tôi cũng không hoàn toàn chắc chắn nếu bạn thực sự có thể có một tính năng danh sách intellisense/autocomplete đó là cực kỳ performant với rất nhiều mặt hàng và phát triển. Tôi không hoàn toàn tốt với việc sử dụng các công cụ lược tả, bạn có đề xuất nào tốt về cách tôi có thể lập hồ sơ này không? Tôi đã thử một trong những hình ảnh bên trong studio trực quan, tuy nhiên các đồ thị đẹp điểm để Application.Run ... = ( –
Bạn có chắc rằng ListBox được ảo hóa đúng, như mã bộ lọc thực tế này nên chạy trong khoảng một phần nghìn giây? –