2009-04-15 2 views
2

Iam с использованием Silverlight 2, в котором у меня проблема с производительностью при использовании элемента управления Listbox. Я связываю список объектов около 500 записей, которые занимают 3-4 секунды для привязки данных.Проблема с производительностью списка с огромными данными в Silverlight 2

Но я не имею эту проблему с DataGrid.

Есть ли у кого-нибудь ответ для улучшения проблемы с производительностью в Listbox?

ответ

2

Не зная дополнительного контекста о вашем приложении, может случиться так. Первое, что приходит на ум, это то, что у вас очень «тяжелое» визуальное дерево. Каждый элемент в ListBox собирается создать некоторый график визуальных объектов. Чем больше у вас есть, тем больше времени требуется для рендеринга.

Когда эти элементы не отображаются на экране, Silverlight все еще выполняет работу по их рендерингу. В основном это означает, что прохождение Layout() и Measure() выполняется во всех ваших элементах ListBox, связанных с данными, даже если они не видны.

Хитрость заключается в использовании виртуализации, чтобы заставить Silverlight не выполнять проходы Layout/Measure на элементах управления, которые в то время не видны в видимой области элемента управления.

Это сообщение в блоге, в котором описывается, как это сделать с помощью StackPanel. Это не должно занять много абстрагировать это в ListBox или еще лучше, вы могли бы просто сделать контрольный контейнер для вашего ListBox виртуализации стек панели, а затем вы бы сделали :)

http://blogs.msdn.com/uberdemo/archive/2009/02/18/a-virtualizedstackpanel-control-in-silverlight-2-0.aspx

4

Причина за этим стоит, что DataGrid поддерживает виртуализацию пользовательского интерфейса, а ListBox - нет. Это означает, что DataGrid создает только визуальные элементы для видимых элементов, а ListBox создает визуальные элементы для всех своих элементов. Всякий раз, когда вам нужно выбирать из списка элементов, которые могут быть очень большими, используйте DataGrid вместо ListBox. Вы можете создать стиль DataGrid и использовать TemplateColumn, чтобы он выглядел так же, как ListBox.

Michael

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