[C#] On_Paint, brush pen.Dispose() ?

On_Paint, brush pen.Dispose() ? [C#] - C#/.NET managed - Programmation

Marsh Posté le 29-11-2005 à 16:15:41    

Bonjour,
 
Sur tous les exemples que je trouve sur le net, (y compris ceux de Microsoft)
dans les events OnPaint des controles, ils declarent leur Pen et leurs Brush, et les disposent a la fin.
 

Code :
  1. public void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
  2. {
  3. Pen pen = new Pen(Color.Black, 1);
  4. Brush brush = new SolidBrush(Color.White);
  5. Brush black = new SolidBrush(Color.Black);
  6. Font font = new Font("Arial",10);
  7. //utilise leur Pen et brush
  8. brush.Dispose();
  9. black.Dispose();
  10. font.Dispose();
  11. pen.Dispose();
  12. }


 
Quel est l'interet de faire ça ?
Ne pourrait-on pas sortir la définition des Pen, Brush et autre et les mettre en variable privée à la classe. Ca eviterait de faire les dispose à chaque appel de la fonction.
 
Si ils font ça, il doit y avoir une raison, non ?
 
fluminis


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 29-11-2005 à 16:15:41   

Reply

Marsh Posté le 29-11-2005 à 18:49:12    

Les objets Pen, Brush, etc... reposent sur GDI+, qui n'est pas une technologie managée. Malgré tout, le fonctionnement du CLR t'assure que le Garbage Collector fera son boulot dés que ces objets seront hors de portée, en théorie tu n'as donc pas besoin d'appeler Dispose(). Néanmoins, comme il s'agit d'opérations graphiques, donc nécessitant un traitement rapide, appeler Dispose() explicitement sera beaucoup plus rapide que l'attente du GC. Ca te permettra de libérer toutes les ressources non managées, et ceci de manière beaucoup plus efficace et rapide.


Message édité par Harkonnen le 29-11-2005 à 18:49:56
Reply

Marsh Posté le 29-11-2005 à 19:10:19    

Mais vaut-il mieux creer ces objets à chaque appel de ma fonction ou de les déclarer une fois pour toute comme membres privés de ma classe ?
 
Car allouer les objets et les detruire à chaque fois ca doit prendre du temps d'execution, non ?


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 29-11-2005 à 20:15:52    

Bah, tu peux faire comme tu veux, ça dépend si tu utilises beaucoup d'objets GDI+ ou pas. Si tu en as peu, je pense que le mieux est de les créer dans le OnPaint, sinon effectivement, tu peux les déclarer comme membres de classe.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed