2009-10-16 7 views
4

J'essaie de mesurer le temps nécessaire au chargement de différentes bibliothèques de graphiques Silverlight (par exemple, Silverlight Control Toolkit, Visifire, Telerik) à l'écran. Mon problème est que je peux seulement mesurer le temps jusqu'à ce que le contrôle soit chargé et que le dessin commence à prendre place sur l'écran, cependant le rendu prend plus de temps à cause des effets d'animation (par exemple, l'évanouissement des points).Mesure du temps de chargement du graphique Silverlight

Y at-il une chance que je puisse mettre en place un moyen automatisé de détecter quand le rendu est terminé? Mon problème est que je n'ai trouvé que le gestionnaire d'événements Loaded sur un élément Silverlight Framework à accrocher sur lequel seulement notifie lorsque le rendu commence.

Un exemple de code J'utilise actuellement Control Toolkit Silverlight est comme suit:

public void Init() 
{ 
    Chart chart = new Chart(); // Init chart object 
    DataPointSeries series; 
    (...)// Init series, add lots of points, set data binding 
    Chart.Series.Add(series); // Add series to chart 
    chart.Loaded += new RoutedEventHandler(Chart_Loaded); 
    LayoutRoot.Children.Add(chart); 
    StartTimer(); // Start timer and wait for control to load 
} 

public void Chart_Loaded(object sender, RoutedEventArgs e) 
{ 
    StopTimer(); // Problem: rendering just started at this point, hasn't finished yet! 
} 

Répondre

4

J'ai trouvé des solutions de contournement pour certaines bibliothèques de graphiques et pour d'autres, je ne l'ai pas fait. Voici les événements que je pouvais accrocher jusqu'à obtenir un temps de mesure réaliste:

graphiques Dundas:

Chart chart; 
Chart.ImageReady += new ImageDownloaded(Chart_ImageReady); // Stop timer at this event 

Silverlight Toolkit:

Chart chart; 
DataPointSeries series; 
Chart.Series.Add(series); 
Chart.Series[0].Loaded += new RoutedEventHandler(Chart_Loaded); // Stop timer at this event 

Steema TeeChart:

TChart chart; 
chart.AfterDraw += new PaintChartEventHandler(chart_AfterDraw); // Stop timer at this event 

Telerik RAD Charts:

RadChart chart; 
chart.DefaultView.ChartArea.Loaded += new RoutedEventHandler(Chart_Loaded); // Stop timer at this event 

Visifire

Chart chart; 
chart.AnimationEnabled = false; // Turn off animation 
chart.Loaded += new RoutedEventHandler(Chart_Loaded); // Stop timer at this event 

La seule bibliothèque, je ne pouvais pas brancher à un événement mis le feu au bon moment était pour Infagristics NetAdvantage.

2

Si vous essayez de comparer les performances, je pense, y compris l'animation est pas la meilleure façon de déterminer le temps de rendu d'un contrôle car différentes animations peuvent prendre différentes durées à compléter.

Je vous suggère plutôt de désactiver l'animation si possible pendant le test. Dans Visifire, vous pouvez le faire en définissant la propriété AnimationEnabled de Chart sur false. Je ne suis pas très au courant des autres. Et en effectuant de tels tests, vous pouvez rendre les différences plus apparentes en utilisant un grand nombre de DataPoints (4K-5K).