2009-10-16 36 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)使差异更加明显。