2009-02-20 2 views
6

У меня есть окно с использованием WPF ListView/GridView, привязанного к ObservableCollection. Спектакль совершенно ужасен. Приложение задыхается, пытаясь загрузить 300-400 элементов и всплески использования процессора каждый раз, когда элемент добавляется/удаляется/изменяется. Профилирование не показывает ничего очевидного.WPF listview/gridview performance horrible, предложения

У кого-нибудь есть предложения?

+0

DataTemplate используется содержит один TextBlock. – 2009-02-20 20:37:41

ответ

2

Предположим, вы используете сложные шаблоны данных для каждого ListViewItem? Это может быть что угодно: от множества изображений до (старых) BitmapEffects до даже ленивых загружаемых свойств, которые извлекают данные по требованию из базы данных (что может привести к тому, что вы выполняете много вызовов db для визуализации каждого изображения в зависимости от того, как ваша модель данных работает).

Во-вторых, сам список способен быстро запускать свои функции загрузки/добавления/изменения/удаления (что означает, что проблема возникает при визуализации данных), или сам список выполняет эти задания медленно (указав, что список имеет какой-то вопрос).

+0

Используемый DataTemplate содержит один текстовый блок. – 2009-02-20 20:38:16

+0

Выполнение вызовов в базе данных не производится. – 2009-02-20 20:41:44

+0

Можете ли вы поделиться немного больше своего кода, который воспроизводит вашу проблему? Может быть, простое новое решение, которое запускает минимум, чтобы вызвать его? – Adrian

1

Вы пробовали виртуализацию, как рекомендовано в этом вопросе ??

WPF ListView Very Slow Performance - Why? (ElementHost, or Other Reason?)

+0

Это поможет, если вы явно устанавливаете свойство ItemsPanel для использования чего-то другого, кроме значения по умолчанию, которое уже является VirtualizingStackPanel. – Adrian

7

Проверить эти свойства из:

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

И очевидно, один, убедитесь, что вы обновили .NET 3.5 SP1, там было много прирост производительности там.

Возможно, стоит посмотреть на элемент управления WPAT datagridview, так как большая часть работы по производительности в .net 3.5 SP1 была такой, что datagridview имел бы хорошую производительность на больших наборах данных.

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

Смежные вопросы