我正在尝试测量在屏幕上加载不同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!
}
答案 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)使差异更明显。