2009-10-29 3 views
0

J'ai besoin de construire un contrôle Windows qui affiche les indicateurs de KPI. Quelque chose de similaire à celui affiché à l'image suivante.Comment construire une liste efficace de KPI pour WinForms

alt text http://www.novolocus.com/wp-content/uploads/2008/03/normal.JPG

Il y a aussi les exigences suivantes:

  1. Liste doit rafraîchir à partir d'un fil de fond tous les ~ 15 secondes
  2. Il doit gérer plus de 100 indicateurs

Mon idée initiale était d'utiliser FlowLayoutPanel avec une combinaison d'une étiquette et d'une image (pour chaque ligne). J'ai réussi à créer exactement la même chose mais à mesure que la liste grandit et se rafraîchit, l'interface utilisateur ne répond plus et l'empreinte mémoire augmente. J'ai essayé la même approche avec GridView et certains composants tiers mais chaque fois que le résultat était similaire, l'interface utilisateur finissait par geler complètement car elle ne pouvait pas gérer autant d'éléments rafraîchissants. Alors, comment aborderiez-vous ce problème, que feriez-vous créer ce contrôle, quels objets choisiriez-vous pour construire l'interface utilisateur et comment l'actualiseriez-vous? (S'il y a un contrôle de 3ème partie qui semble bien qui pourrait aussi fonctionner pour moi).

Répondre

3

Une telle disposition ne devrait pas entraîner une augmentation de l'encombrement de la mémoire ou un ralentissement.

Votre description ressemble plus à une fuite de ressources dans votre contrôle (ne pas jeter d'objets graphiques). Assurez-vous que vous savez que l'interface IDisposable implique le besoin de using(){} pour les objets Brush, Graphics et Image.

Un petit échantillon:

using (Graphics g = Graphics.FromImage(picture)) 
using (Brush fill = new SolidBrush(Color.Yellow)) 
{ 
    g.FillRectangle(fill, x0, y0, x1, y1); 
} 
+0

Okey, j'ai changé mon approche et au lieu d'ajouter les contrôles au panneau et d'autres choses, je les dessine directement comme vous le suggérez. Les œuvres trouvent :) +25 pour vous. Tnx. – Anne

Questions connexes