2009-09-07 6 views
32

Je voudrais une description simple de la façon de mettre en œuvre un panneau de virtualisation pour un ItemsControl qui est databound à un ObservableCollection dans mon MVVM.WPF VirtualizingStackPanel pour des performances accrues

J'ai une instance ItemsControl pour chaque onglet dans un onglet de contrôle, et les onglets de commutation devient TRÈS lent lorsque le ItemsControl devient plus grand.

Que puis-je faire pour accélérer l'application?

J'ai ouvert un profileur WPF et j'ai vu que chaque élément (qui est un contrôle utilisateur personnalisé) affiché dans mon ItemsControl de chaque onglet avait son propre ContentPresenter. Donc, j'ai essentiellement eu 100 présentateurs de contenu tous courir pour 100 articles dans mon ObservableCollection dans MVVM. Est-ce corrrect? Comment puis-je optimiser?

Répondre

48

Il existe deux techniques qui pourraient être d'une grande aide. Bea Stolnitz décrit très bien les deux sur son blog.

Le premier est UI Virtualization et le second est Data Virtualization

Dans la virtualisation de l'interface utilisateur que vous utilisez des choses comme VirtualizingStackPanel pour faire l'interface utilisateur tirer moins de choses.

la virtualisation des données fait que vous n'allez pas apporter un million d'objets en mémoire lorsque vous ne montrer 100.

virtualisation Ainsi l'interface utilisateur réduit le nombre de choses établi et la virtualisation de données réduit le nombre de choses qui pourraient Être dessiné.

Hope qui aide

9

J'ai eu exactement le même problème en utilisant WPF ind TabControl et DataGrid. En augmentant la taille des éléments DataGrid, la commutation des onglets devient TRÈS lente! Après cela, j'ai trouvé ce post en lisant le blog de Bea Stolnitz comme supposé par la réponse précédente. Cela m'a donné l'allusion à Google "WPF tabcontrol VirtualizingStackPanel" qui me donne le lien vers DrWPF: http://groups.google.com/group/wpf-disciples/browse_thread/thread/6f3531a1720252dd

Il décrit exactement le problème et donne la solution :-))

.... Le hit perf est pendant la construction de l'arbre. Malheureusement, si vous utilisez une approche MVVM typique avec une liaison sur la propriété ItemsSource
du TabControl, l'arbre entier doit être reconstruit à chaque fois qu'un élément d'onglet est sélectionné. C'est généralement une opération très coûteuse. ....

Questions connexes