Partager via


Optimisation des performances : contrôles

Windows Presentation Foundation (WPF) inclut un grand nombre des composants d’interface utilisateur courants utilisés dans la plupart des applications Windows. Cette rubrique contient des techniques permettant d’améliorer les performances de votre interface utilisateur.

Affichage de jeux de données volumineux

Les contrôles WPF tels que les ListView et les ComboBox sont utilisés pour afficher des listes d’éléments dans une application. Si la liste à afficher est volumineuse, les performances de l’application peuvent être affectées. Cela est dû au fait que le système de disposition standard crée un conteneur de disposition pour chaque élément associé au contrôle de liste et calcule sa taille et sa position de disposition. En règle générale, vous n’avez pas besoin d’afficher tous les éléments en même temps ; Au lieu de cela, vous affichez un sous-ensemble et l’utilisateur fait défiler la liste. Dans ce cas, il est judicieux d’utiliser l’interface utilisateur virtualisation, ce qui signifie que la génération du conteneur d’éléments et le calcul de disposition associé pour un élément sont différés jusqu’à ce que l’élément soit visible.

Ui Virtualization est un aspect important des contrôles de liste. La virtualisation de l’interface utilisateur ne doit pas être confondue avec la virtualisation des données. La virtualisation de l’interface utilisateur stocke uniquement les éléments visibles en mémoire, mais dans un scénario de liaison de données stocke toute la structure de données en mémoire. En revanche, la virtualisation des données stocke uniquement les éléments de données visibles sur l’écran en mémoire.

Par défaut, la virtualisation de l’interface utilisateur est activée pour les contrôles ListView et ListBox lorsque leurs éléments de liste sont liés aux données. TreeView virtualisation peut être activée en définissant la propriété associée VirtualizingStackPanel.IsVirtualizing sur true. Si vous souhaitez activer la virtualisation de l’interface utilisateur pour les contrôles personnalisés qui dérivent de ItemsControl ou des contrôles d’élément existants qui utilisent la classe StackPanel, comme ComboBox, vous pouvez définir le ItemsPanel sur VirtualizingStackPanel et définir IsVirtualizing sur true. Malheureusement, vous pouvez désactiver la virtualisation de l’interface utilisateur pour ces contrôles sans le réaliser. Voici une liste de conditions qui désactivent la virtualisation de l’interface utilisateur.

Une considération importante lorsque vous virtualisez des conteneurs d’éléments est de savoir si vous avez des informations d’état supplémentaires associées à un conteneur d’éléments qui appartient à l’élément. Dans ce cas, vous devez enregistrer l’état supplémentaire. Par exemple, vous pouvez avoir un élément contenu dans un contrôle Expander et que l’état IsExpanded est lié au conteneur de l’élément, et non à l’élément lui-même. Lorsque le conteneur est réutilisé pour un nouvel élément, la valeur actuelle de IsExpanded est utilisée pour le nouvel élément. En outre, l’ancien élément perd la valeur de IsExpanded correcte.

Actuellement, aucun contrôle WPF n’offre de prise en charge intégrée de la virtualisation des données.

Recyclage des conteneurs

Une optimisation de la virtualisation de l’interface utilisateur ajoutée dans .NET Framework 3.5 SP1 pour les contrôles qui héritent de ItemsControl est recyclage des conteneurs, qui peut également améliorer les performances de défilement. Lorsqu'un ItemsControl qui utilise la virtualisation de l'interface utilisateur est peuplé, il crée un conteneur pour chaque élément qui entre dans le champ de vision et détruit le conteneur pour chaque élément qui en sort. Recyclage de Conteneur permet au contrôle de réutiliser les conteneurs d'éléments existants pour différents éléments de données, afin d'éviter la création et la destruction continues des conteneurs d'éléments lorsque l'utilisateur défile le ItemsControl. Vous pouvez choisir d’activer le recyclage des éléments en définissant la propriété jointe VirtualizationMode sur Recycling.

Toute ItemsControl qui prend en charge la virtualisation peut utiliser le recyclage des conteneurs. Pour un exemple de la façon d'activer le recyclage des conteneurs sur un ListBox, consultez Améliorer les performances de défilement d'un ListBox.

Prise en charge de la virtualisation bidirectionnelle

VirtualizingStackPanel offre une prise en charge intégrée de la virtualisation de l’interface utilisateur dans une direction, horizontalement ou verticalement. Si vous souhaitez utiliser la virtualisation bidirectionnelle pour vos contrôles, vous devez implémenter un panneau personnalisé qui étend la classe VirtualizingStackPanel. La classe VirtualizingStackPanel expose des méthodes virtuelles telles que OnViewportSizeChanged, LineUp, PageUpet MouseWheelUp. Ces méthodes virtuelles vous permettent de détecter une modification dans la partie visible d’une liste et de la gérer en conséquence.

Optimisation des modèles

L’arborescence visuelle contient tous les éléments visuels d’une application. En plus des objets directement créés, il contient également des objets en raison de l’expansion du modèle. Par exemple, lorsque vous créez un Button, vous obtenez également des objets ClassicBorderDecorator et ContentPresenter dans l’arborescence visuelle. Si vous n’avez pas optimisé vos modèles de contrôle, vous créez peut-être beaucoup d’objets inutiles supplémentaires dans l’arborescence visuelle. Pour plus d’informations sur l’arborescence visuelle, consultez Vue d’ensemble du rendu graphique WPF.

Défilement différé

Par défaut, lorsque l’utilisateur fait glisser le pouce sur une barre de défilement, l’affichage de contenu est mis à jour en permanence. Si le défilement est lent dans votre élément de commande, envisagez d’utiliser le défilement différé. Dans le défilement différé, le contenu est mis à jour uniquement lorsque l’utilisateur libère le pouce.

Pour implémenter le défilement différé, définissez la propriété IsDeferredScrollingEnabled sur true. IsDeferredScrollingEnabled est une propriété jointe et peut être définie sur ScrollViewer et tout contrôle qui a un ScrollViewer dans son modèle de contrôle.

Contrôles qui implémentent des fonctionnalités de performances

Le tableau suivant répertorie les contrôles courants pour l’affichage des données et leur prise en charge des fonctionnalités de performances. Pour plus d’informations sur l’activation de ces fonctionnalités, consultez les sections précédentes.

Contrôle Virtualisation Recyclage des conteneurs Défilement différé
ComboBox Peut être activé Peut être activé Peut être activé
ContextMenu Peut être activé Peut être activé Peut être activé
DocumentViewer Non disponible Non disponible Peut être activé
ListBox Par défaut Peut être activé Peut être activé
ListView Par défaut Peut être activé Peut être activé
TreeView Peut être activé Peut être activé Peut être activé
ToolBar Non disponible Non disponible Peut être activé

Remarque

Pour obtenir un exemple de l'activation de la virtualisation et de la réutilisation des conteneurs sur un TreeView, consultez Améliorer les performances de TreeView.

Voir aussi