Tôi có một DGV không databound (không có nguồn dữ liệu, vv; hàng thêm bằng tay). Để lọc nó tôi đã làm một kiểm tra trong một vòng lặp và thiết lập các hàng có thể nhìn thấy tài sản một cách thích hợp. Điều này làm việc tốt với các bộ thử nghiệm nhỏ hơn, nhưng thất bại hoàn toàn về hiệu suất với các bộ thử nghiệm lớn hơn. 1k hàng được lọc ở 5000/giây. 10 nghìn hàng được lọc chỉ ~ 250/giây. 50k chỉ với 40/giây. Giả định của tôi về những gì đang xảy ra là mỗi khi tôi thay đổi một hàng hiển thị DGV xây dựng lại một danh sách các hàng được hiển thị biến quá trình lọc thành một hoạt động O (n^2).Lọc một DataGridView không có databinding
Mặc dù thậm chí 10k hàng cho biết rằng người dùng đang lạm dụng hệ thống; người dùng có hành vi xấu cần phải được tính toán vì vậy tôi cần phải làm điều gì đó khác đi. Có cách nào nhanh hơn để lọc một số lượng lớn hàng hơn so với những gì tôi đang làm bây giờ mà không sử dụng ràng buộc dữ liệu hay tôi cần quay lại xóa/tạo lại tất cả các hàng (với số lượng dữ liệu hợp lý chậm hơn đáng kể)?
//psuedocode. runs slowly if more than a few thousand rows. foreach (DataGridViewRow row in myDGV) { row.Visible = CalculateFilter(row); }
Tại sao các hàng phải được tạo theo cách thủ công? Có thể không có câu trả lời tốt hay nhanh nếu đây là vấn đề kiến trúc sâu. – Tom
Không có cơ sở dữ liệu để cung cấp nguồn dữ liệu. Phụ trợ dữ liệu sử dụng xml serialization để lưu trữ các bản ghi dữ liệu trong các tệp "pseudotable" và chuyển các giá trị hiển thị (kết hợp từ nhiều tệp) ra dưới dạng Danh sách <> của mỗi cấu trúc chứa một dữ liệu cho một hàng DGV duy nhất. –
Cảm ơn bạn đã chỉ ra. Tôi có lẽ sẽ không nhận thức được điều đó cho đến khi quá muộn. –