[ C# ] ListView qui consomme un max

ListView qui consomme un max [ C# ] - C#/.NET managed - Programmation

Marsh Posté le 08-08-2011 à 16:22:39    

Bonjour :o
 
 
Voilà j'ai un problème super bizarre avec un Listview (Winforms).  :pt1cable:  
Elle consomme un max de puissance CPU (à savoir 5-15% de taux d'utilisation CPU [Core Duo T2400]) à partir du moment où elle a un item à afficher  :pt1cable:. Alors au début j'avais un timer pour la rafraichir toute les 2,5%, mais même sans timer j'ai ce problème.
 
Je précise que c'est bien l'affichage qui consomme la puissance et pas le traitement qu'il y a avant des donnés qu'on cherche à afficher.
De plus cette liste ne contient que 4-6 éléments, 5 colonnes et 2-3 groupes au max. Rien de plus!
 
Concrètement.

Code :
  1. Console.ForegroundColor = ConsoleColor.White;
  2. Console.Write("{0}", lvItem.SubItems[1].Text);
  3. Console.ForegroundColor = ConsoleColor.Green;
  4. Console.Write("  {0}", lvItem.SubItems[2].Text);
  5. Console.Write("  {0}", lvItem.SubItems[3].Text);
  6. Console.ForegroundColor = ConsoleColor.Blue;
  7. Console.Write("  {0}", lvItem.SubItems[4].Text);
  8. Console.ForegroundColor = ConsoleColor.Red;
  9. Console.WriteLine("  {0}", lvItem.SubItems[5].Text);
  10. Console.ResetColor();
  11. //lvHosts.Items.Add(lvItem);


La pas de prob de charge CPU, ca prouve bien que c'est pas traitement des info à mettre dans l'item qui est en cause.  
Par contre si je décommente la dernière ligne c'est la "cata".
(Le Subitems[0], c'est juste une icone 16x16px.)
 
 
J'y comprends rien  :cry:  
 
 
Vous pouvez m'aider s'il vous plaît?
 
Merci


Message édité par Profil supprimé le 08-08-2011 à 16:24:21
Reply

Marsh Posté le 08-08-2011 à 16:22:39   

Reply

Marsh Posté le 09-08-2011 à 21:18:36    

Tu appelles BeginUpdate / EndUpdate autour de tes groupes d'insertions dans la LV ?


Message édité par TotalRecall le 09-08-2011 à 21:18:44

---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 09-08-2011 à 23:58:54    

Je viens de trouver la source du problème. J'en reviens toujours pas.
 
La listView contient 3 ListViewGroup. Ben je les enlève et plus de problème de surcharge CPU.  [:tinostar]  
 
Non mais c'est dingue. Ces 3 ListViewGroup je les ai créé avec l'interface graphique de Visual Studio, j'ai juste donné un nom au header de ce group et rien d'autre.
 
Je précise aussi qu'il suffit que ces ListViewGroup soit ajoutés à l'objet listview pour avoir le problème. Même si ces groups ne sont pas affichés (car aucun item n'est dans ces group) ben ca bug quand même.
 
 
Je suis sur le cul là.  [:tinostar]  
Ca m’embête parce que ca m'arrangeait bien ces groups.

Reply

Marsh Posté le 10-08-2011 à 07:21:49    

Bon alors je viens de créer une application à part.
 
Elle ne contient qu'une listview à 6 colonnes et 3 listviewgroup (j'ai pas encore testé avec d'autre valeurs).
 
Un bouton pour rajouter des item à la listview:

Code :
  1. lv.BeginUpdate();
  2.             ListViewGroup myGroup = lv.Groups[0];
  3.             ListViewGroup myGroup2 = lv.Groups[1];
  4.             ListViewGroup myGroup3 = lv.Groups[2];
  5.             ListViewItem item = new ListViewItem();
  6.             item.Group = myGroup;
  7.             item.SubItems.Add("blabla" );
  8.             item.SubItems.Add("blabla" );
  9.             item.SubItems.Add("blabla" );
  10.             item.SubItems.Add("blabla" );
  11.             item.SubItems.Add("blabla" );
  12.             item.SubItems.Add("blabla" );
  13.             item.SubItems.Add("blabla" );
  14.            
  15.             ListViewItem item2 = new ListViewItem();
  16.             item2.Group = myGroup;
  17.             item2.SubItems.Add("blabla" );
  18.             item2.SubItems.Add("blabla" );
  19.             item2.SubItems.Add("blabla" );
  20.             item2.SubItems.Add("blabla" );
  21.             item2.SubItems.Add("blabla" );
  22.             item2.SubItems.Add("blabla" );
  23.             item2.SubItems.Add("blabla" );
  24.             lv.Items.Add(item);
  25.             lv.Items.Add(item2);
  26.             lv.EndUpdate();


 
Et c'est tout, il a absolument plus rien d'autre.
Résultat?
 
Ca bug aussi, mais sous certaines conditions.
 
1.
http://img803.imageshack.us/img803/6866/test1copy.png
 
 
2.
http://img135.imageshack.us/img135/599/test2copy.png
 
Notez la différence de charge CPU.
La différence entre ces 2 images? La scrollbar!!!  :cry:  
 
Dès qu'il y a trop de item et que la scrollbar apparaît la charge CPU augmente!!!
 
 
Par contre dans ma première application sur laquel je bossais et où j'ai eu le problème (d'ailleurs sur les 2 différents PC sur lesquels je bosse), je n'ai pas besoin que la scrollbar apparaisse pour avoir ce problème de surcharge cpu. C'est vraiment bizarre.

Reply

Sujets relatifs:

Leave a Replay

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