2009-02-20 37 views
6

Tôi có một cửa sổ bằng cách sử dụng một ListView WPF/GridView ràng buộc với một ObservableCollection. Hiệu suất là hoàn toàn khủng khiếp. Các cuộn cảm ứng dụng cố gắng tải 300-400 mục và mức sử dụng CPU tăng đột biến mỗi lần một mục được thêm/xóa/sửa đổi. Profiling không tiết lộ bất cứ điều gì rõ ràng.WPF listview/gridview hiệu suất khủng khiếp, gợi ý

Bất kỳ ai có bất kỳ đề xuất nào?

+0

Các DataTemplate được sử dụng chứa một TextBlock duy nhất. –

Trả lời

2

Đầu tiên, bạn có đang sử dụng các mẫu dữ liệu phức tạp cho mỗi ListViewItem không? Điều này có thể là bất kỳ thứ gì từ rất nhiều hình ảnh, đến BitmapEffects (cũ), thậm chí là các thuộc tính lười biếng nạp dữ liệu theo yêu cầu từ một cơ sở dữ liệu (có thể khiến bạn thực hiện nhiều cuộc gọi db để hiển thị từng hình ảnh, tùy thuộc vào cách mô hình dữ liệu của bạn công trinh).

Câu hỏi thứ hai, chính danh sách có thể chạy các thói quen tải/thêm/sửa/xóa nhanh chóng (có nghĩa là sự cố xảy ra khi hiển thị dữ liệu), hoặc danh sách đó làm chậm công việc đó (cho biết danh sách đang có một số loại vấn đề).

+0

DataTemplate đang được sử dụng chứa một TextBlock duy nhất. –

+0

Không có cuộc gọi cơ sở dữ liệu nào được thực hiện. –

+0

Bạn có thể chia sẻ thêm một chút mã của mình để tái tạo sự cố không? Có lẽ một giải pháp mới đơn giản chạy tối thiểu để gây ra nó? – Adrian

7

Kiểm tra các đặc tính này ra:

VirtualizingStackPanel.IsVirtualizing="True" 
VirtualizingStackPanel.VirtualizationMode="Recycling" 
ScrollViewer.IsDeferredScrollingEnabled="True" 
1

Và một rõ ràng, chắc chắn rằng bạn đã nâng cấp lên NET 3.5 SP1, đã có rất nhiều lợi nhuận thực hiện ở đó.

Ngoài ra, có thể đáng xem xét kiểm soát datagridview WPF vì rất nhiều công việc hiệu suất trong .net 3.5 SP1 là vì vậy datagridview sẽ có hiệu suất tốt trên các tập dữ liệu lớn.

http://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25047

Các vấn đề liên quan