Optimisation des performances : ressources d'application
Mise à jour : novembre 2007
WPF vous permet de partager des ressources d'application afin que vous puissiez prendre en charge une apparence cohérente ou un comportement à travers des éléments type semblables. Cette rubrique fournit quelques recommandations dans ce domaine qui peut vous aider à améliorer les performances de vos applications.
Pour plus d'informations sur les ressources, consultez Vue d'ensemble des ressources.
Partage de ressources
Si votre application utilise des contrôles personnalisés et définit des ressources dans un ResourceDictionary (ou nœud de ressources XAML), il est recommandé que vous définissiez les ressources au niveau Application ou de l'objet Window, ou dans le thème par défaut pour les contrôles personnalisés. La définition de ressources dans ResourceDictionary d'un contrôle personnalisé impose un impact sur les performances pour chaque instance de ce contrôle. Par exemple, si vous avez des opérations de pinceau intensives définies dans le cadre de la définition de ressource d'un contrôle personnalisé et de nombreuses instances du contrôle personnalisé, le jeu de travail de l'application augmentera considérablement.
Pour illustrer ce point, considérez les éléments suivants. Admettons que vous développez un jeu de cartes à l'aide de WPF. Pour la plupart des jeux de cartes, vous avez besoin de 52 cartes avec 52 faces différentes. Vous décidez d'implémenter une carte de contrôle personnalisé et vous définissez 52 pinceaux (chacun représentant une face de carte) dans les ressources de votre carte de contrôle personnalisé. Dans votre application principale, vous créez initialement 52 instances de cette carte de contrôle personnalisé. Chaque instance de la carte de contrôle personnalisé génère 52 instances des objets Brush, ce qui vous donne un total de 52 * 52 objets Brush dans votre application. En déplaçant les pinceaux hors des ressources de la carte de contrôle personnalisé au niveau Application ou de l'objet Window, ou en les définissant dans le thème par défaut pour le contrôle personnalisé, vous réduisez le jeu de travail de l'application, puisque vous partagez maintenant les 52 pinceaux parmi 52 instances de la carte de contrôle.
Partage d'un pinceau sans copier
Si vous avez plusieurs éléments utilisant le même objet Brush, définissez le pinceau comme une ressource et référencez-le, plutôt que de définir le pinceau inline dans XAML. Cette méthode créera une instance et la réutilisera, alors que la définition de pinceaux inline dans XAML crée une instance pour chaque élément.
L'exemple de balise suivant illustre ce point :
<StackPanel.Resources>
<LinearGradientBrush x:Key="myBrush" StartPoint="0,0.5" EndPoint="1,0.5" Opacity="0.5">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="GoldenRod" Offset="0" />
<GradientStop Color="White" Offset="1" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</StackPanel.Resources>
<!-- Non-shared Brush object. -->
<Label>
Label 1
<Label.Background>
<LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5" Opacity="0.5">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="GoldenRod" Offset="0" />
<GradientStop Color="White" Offset="1" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Label.Background>
</Label>
<!-- Shared Brush object. -->
<Label Background="{StaticResource myBrush}">Label 2</Label>
<Label Background="{StaticResource myBrush}">Label 3</Label>
Utilisation de ressources statiques lorsque cela est possible
Une ressource statique fournit une valeur pour tout attribut de propriété XAML en recherchant une référence à une ressource déjà définie. Le comportement de recherche pour cette ressource est analogue à recherche au moment de la compilation.
En revanche, une ressource dynamique créera une expression temporaire pendant la compilation initiale et donc diffèrera la recherche de ressources jusqu'à ce que la valeur de ressource demandée soit réellement demandée pour construire un objet. Le comportement de recherche pour cette ressource est analogue à la recherche au moment de l'exécution, qui entraîne un impact sur les performances. Utilisez les ressources statiques quand cela est possible dans votre application, à l'aide de ressources dynamiques uniquement en cas de besoin.
L'exemple de balise suivant affiche l'utilisation des deux types de ressources :
<StackPanel.Resources>
<SolidColorBrush x:Key="myBrush" Color="Teal"/>
</StackPanel.Resources>
<!-- StaticResource reference -->
<Label Foreground="{StaticResource myBrush}">Label 1</Label>
<!-- DynamicResource reference -->
<Label Foreground="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">Label 2</Label>
Voir aussi
Concepts
Optimisation des performances des applications WPF
Planification des performances des applications
Optimisation des performances : tirer parti du matériel
Optimisation des performances : disposition et conception
Optimisation des performances : graphiques 2D et acquisition d'images
Optimisation des performances : comportement d'objets
Optimisation des performances : texte
Optimisation des performances : liaison de données