测量Silverlight图表加载时间

时间:2009-10-16 15:23:24

标签: silverlight charts rendering

我正在尝试测量在屏幕上加载不同Silverlight图表库(例如Silverlight Control Toolkit,Visifire,Telerik)所需的时间。

我的问题是我只能测量加载控件并开始在屏幕上进行绘制的时间,但是由于动画效果(例如点淡入)渲染需要更多时间。

我是否有可能设置一些自动检测渲染何时结束的方法?我的问题是我只发现Silverlight Framework元素上的Loaded事件处理程序挂钩,只有在渲染开始时才会通知。

我目前用于Silverlight Control Toolkit的示例代码如下:

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

2 个答案:

答案 0 :(得分:4)

我找到了一些图表库和其他一些图表库的解决方法。以下是我可以联系的事件,以获得真实的测量时间:

Dundas图表:

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。

答案 1 :(得分:2)

如果您试图比较性能,我认为包含动画不是确定控件渲染时间的最佳方法,因为不同的动画可能需要不同的时间才能完成。

我宁愿建议您在测试时尽可能禁用动画。在Visifire中,您可以通过将Chart的AnimationEnabled属性设置为false来实现。我不太了解别人。在执行此类测试时,您可以通过使用大量DataPoints(4K-5K)使差异更明显。