Bonjour,
Je suis actuellment occupé à améliorer les performances visuelles d'une application winform.
J'ai remarqué que les méthodes OnPaint et OnPaintBackground d'une Form ou d'un UserControl étaient appelées à chaque fois qu'un contrôles de cette form ou de ce user control était dessiné.
Faites le test : nouveau projet avec une seule winform, overridez OnPaint dans le classe Form1 et dedans Console.WriteLine("OnPaint");
protected override void OnPaint(PaintEventArgs e)
{
Console.WriteLine("OnPaint");
base.OnPaint(e);
}
On lance l'applic.
la sortie nous donne une seule ligne.
Rajoutons maintenant 2 boutons sur la form.
On lance l'applic.
la sortie nous donne 3 lignes (donc 3 passages dans OnPaint).
Ceci est également valable pour OnPaintBackground.
Je comprends bien qu'il soit nécessaire que ces méthodes soient appelées après que les boutons soient dessinés un à un, cependant, cela peut devenir fort coûteux en performance.
Exemple : lorsqu'un user control passe de visible=false à visible=true, le background du user control va se peindre autant de fois que le user control contient de contrôles et il y a dès lors, je pense, un risque de scintillement.
Quelqun connait-il, dans cet exemple, par exemple, un moyen d'éviter ces multis paint et de ne peindre le tout une bonne fois pour toute, une fois tous les contrôles dessinés ??
Ou bien fais-je fausse piste ?
Merci d'avance pour vos impressions ainsi que votre savoir
Partager