2009-10-16 70 views
4

我想測量不同的Silverlight圖表庫(例如Silverlight控件工具包,Visifire,Telerik)在屏幕上加載需要多長時間。測量Silverlight圖表加載時間

我的問題是,我只能測量直到控件加載和繪圖開始發生在屏幕上的時間,但由於動畫效果(例如點漸入),渲染需要更多時間。

有沒有什麼機會可以設置一些自動化的方式來檢測渲染何時結束?我的問題是,我只發現Silverlight框架元素上的Loaded事件處理程序掛鉤,只有在渲染開始時才通知它。

我目前使用的示例代碼爲Silverlight控件工具包如下:

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! 
} 

回答

4

我發現了一些圖表庫和一些其他我沒有的解決方法。以下是事件,我可以鉤到得到一個現實的測量時間:

登打士圖表:

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

Silverlight工具包:

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圖表:

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 

我不能掛鉤到事件的唯一庫解僱在正確的時間是爲Infagristics的NetAdvantage。

2

如果你想比較性能,我想包括動畫是不是確定演出時間的最佳方式的控件,因爲不同的動畫可能需要不同的時間才能完成。

我寧願建議您在測試時禁用動畫。在Visifire中,您可以將Chart的AnimationEnabled屬性設置爲false。我不太瞭解別人。在執行這些測試時,您可以通過使用大量數據點(4K-5K)使差異更加明顯。