Tôi có một danh sách các đối tượng mà tôi muốn giảm xuống chỉ những đối tượng có thuộc tính chứa trong một danh sách riêng biệt.Chứa danh sách quá chậm, cách cải thiện?
List1 là danh sách các chuỗi đơn giản.
List2 là danh sách các đối tượng có chứa hai thuộc tính chuỗi; A và B.
Tất cả các mục trong đó A và B không có trong Danh sách 1, phải được loại bỏ.
Quá trình này phụ thuộc rất nhiều thời gian và cần phải nhanh nhất có thể. Hiện tại tôi có triển khai sau;
var List1 = new List<String>() {"Around", "9000", "strings"}; //List of about 9000 strings
var List2 = databaseList.ToList(); //Around 2.5 million objects
var reducedList = new HashSet<Object>();
foreach (var item in List2)
{
if(List1.Contains(item.A) && List1.Contains(item.B))
{
reducedList.Add(item);
}
}
Quá trình này mất khoảng 7 giây để hoàn thành, yêu cầu hiện tại của tôi quá chậm.
Tôi đã thử chạy tính năng này bằng LINQ, nhưng cho kết quả tương tự, khoảng 7 giây.
var reducedList = List2.Where(r => List1.Contains(r.A)).Where(r => List1.Contains(r.B)).ToList();
Bất kỳ đề xuất nào về những gì tôi có thể làm để cải thiện điều này?
EDIT: Tôi không thể làm được điều này ở phía bên SQL của sự vật, kể từ 9000 chuỗi mà tôi cần phải so sánh với không thể được "dịch" vào và SQL truy vấn, nhưng sẽ đi phía trên cho phép 2100 tham số đầu vào được cho phép trong thiết lập SQL Server của chúng tôi.
[HashSet] (https://www.google.com/search?q=hashset&ie=utf-8&oe=utf-8). –
Mất bao lâu ** chỉ ** thực hiện 'foreach' trên tất cả các mục trong cơ sở dữ liệu? Bạn có định thời gian vòng lặp 'foreach', hoặc hai câu lệnh khởi tạo không? –
Việc tìm kiếm trên cơ sở dữ liệuList chứa hơn 2,5 triệu đối tượng là những gì làm phiền tôi; cũng được đặt tên (databaseList) là bạn chắc chắn bạn không thể thực hiện truy vấn ở cấp db? –