L'utilisation des objets graphiques en C# a un impact direct sur les performances et la gestion mémoire. Ce benchmark compare l'instanciation d'un SolidColorBrush
avec l'utilisation de l'instance statique Brushes.Red
.
[ShortRunJob]
[MemoryDiagnoser]
public class BrushBench
{
[Benchmark]
public Brush New() => new SolidColorBrush(Colors.Red);
[Benchmark]
public Brush Static() => Brushes.Red;
}
Method | Mean | Error | StdDev | Gen0 | Allocated |
---|---|---|---|---|---|
New | 140.61 ns | 17.964 ns | 0.985 ns | 0.0279 | 176 B |
Static | 18.82 ns | 3.287 ns | 0.180 ns | - | - |
New()
: Crée un nouvel objetSolidColorBrush
, entraînant des allocations mémoire et un temps d'exécution plus long.Static()
: Réutilise une instance existante (Brushes.Red
), éliminant les allocations et améliorant les performances.
L'instance statique est 8 fois plus rapide et sans allocation mémoire.
Pour les objets fréquemment réutilisés :
Brushes.Red
et autres pinceaux prédéfinisColors.Red
et autres couleurs statiquesPens.Black
,Fonts.SystemFont
, etc.
On peut définir des pinceaux statiques pour uniformiser l'affichage et éviter les allocations inutiles :
public static class CustomBrushes
{
public static readonly Brush Primary = new SolidColorBrush(Color.FromRgb(34, 150, 243));
public static readonly Brush Secondary = new SolidColorBrush(Color.FromRgb(243, 34, 150));
public static readonly Brush Background = new SolidColorBrush(Color.FromRgb(240, 240, 240));
}
Une autre solution peut être de passer par un singleton.
Créer un SolidColorBrush
dynamique peut être justifié lorsque :
- La couleur ne peut pas être prédite à l'avance.
- Une modification de la transparence ou de la couleur est nécessaire à l'exécution.
- Des animations doivent être appliquées sur un pinceau sans impacter les autres éléments statiques.
Utiliser Brushes.Red
et d'autres instances statiques améliore significativement les performances et réduit les allocations mémoire. Cette approche peut être généralisée à d'autres types (Colors
, Pens
, Fonts
).
Enfin, une classe statique regroupant des pinceaux personnalisés renforce l'organisation et optimise la gestion des ressources.