Tôi đang sử dụng StackPanel để bố cục một số điều khiển theo chiều dọc (ví dụ: Tiêu đề, tiêu đề phụ, hộp danh sách, dấu tách, hộp danh sách, v.v.).Cải thiện hiệu suất cho ListBox lớn trong StackPanel?
StackPanel là con của ScrollViewer để đảm bảo nội dung của nó luôn có thể cuộn được.
Một trong các điều khiển trong StackPanel là một ListBox.
Các mục của nóSource là dữ liệu được liên kết với một bộ sưu tập khổng lồ và một DataTemplate phức tạp được sử dụng để nhận ra từng mục.
Thật không may, tôi nhận được hiệu suất thực sự kém (CPU/bộ nhớ cao) với nó.
tôi đã cố gắng
- thiết ItemsPanel của ListBox để một VirtualizingStackPanel, và
- trọng ControlTemplate của nó để chỉ một ItemsPresenter (loại bỏ ScrollViewer của ListBox).
Nhưng không có sự khác biệt về hiệu suất. Tôi đoán StackPanel cung cấp cho trẻ em nội bộ của nó chiều cao vô hạn trong khi đo?
Khi tôi thay thế ScrollViewer và StackPanel bằng các bảng/bố cục khác (ví dụ: Grid, DockPanel) và hiệu suất được cải thiện đáng kể, dẫn tôi tin rằng nút cổ chai cũng như giải pháp đang được ảo hóa.
Có cách nào để tôi cải thiện hiệu suất CPU/bộ nhớ của chế độ xem này không?
[Cập nhật 1]
dự án mẫu gốc: http://s000.tinyupload.com/index.php?file_id=29810707815310047536
[Cập nhật 2]
tôi đã cố gắng restyling/khuôn mẫu TreeView/TreeViewItems để đến với ví dụ sau. Nó vẫn mất một thời gian dài để bắt đầu/tương tự, sử dụng bộ nhớ cao. Nhưng một khi được nạp, cuộn cảm thấy phản ứng nhanh hơn nhiều so với mẫu ban đầu.
Tự hỏi liệu có cách nào khác để cải thiện hơn nữa thời gian khởi động/sử dụng bộ nhớ không?dự án
restyled TreeView: http://s000.tinyupload.com/index.php?file_id=00117351345725628185
[Cập nhật 2] giải pháp
pushpraj của hoạt động giống như một nét duyên dáng
- gốc:
- Startup: 35s,
- Memory : 393MB
- Scrolling: Chậm
- TreeView:
- Startup: 18s,
- Memory 377MB,
- Scrolling: Nhanh
- pushpraj của giải pháp:
- Startup : < 1s,
- Bộ nhớ: 20MB,
- Scrolling: Nhanh
Sửa chiều cao tối đa của listbox sẽ gây ra 2 thanh cuộn xuất hiện (xem http://i.imgur.com/s1MJ6BO.png?1) – jayars
đúng, nhưng đồng thời ảo hóa chỉ có thể hoạt động khi chiều cao cố định hoặc chiều cao tối đa được xác định, nó không thể hoạt động với chiều cao không giới hạn. Bạn có thể sử dụng bộ sưu tập tổng hợp kết hợp tất cả các mục trong stackpanel và hiển thị tất cả chúng trong một hộp danh sách với kích hoạt ảo hóa. bạn có thể chia sẻ mã, tôi sẽ cố gắng giúp bạn với điều đó. – pushpraj
Đã cập nhật để bao gồm dự án mẫu – jayars