代码之家  ›  专栏  ›  技术社区  ›  Gergely Orosz

测量Silverlight图表加载时间

  •  4
  • Gergely Orosz  · 技术社区  · 15 年前

    我正在尝试测量不同的Silverlight图表库(例如Silverlight控制工具包、Visifire、Telerik)在屏幕上加载所需的时间。

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

    当渲染结束时,是否有可能设置自动检测方法?我的问题是,我只在Silverlight框架元素上找到要挂接的已加载事件处理程序,该元素仅在渲染开始时通知。

    我当前用于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!
    }
    
    2 回复  |  直到 13 年前
        1
  •  4
  •   Gergely Orosz    15 年前

    我为一些图表库找到了一些解决方法,而其他一些则没有。以下是我可以联系起来获得实际测量时间的事件:

    邓达斯图表:

    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 T形图:

    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
    

    维斯菲尔

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

    唯一一个我不能连接到在正确的时间被解雇的事件的图书馆是为臭名昭著的NetAdvantage。

        2
  •  2
  •   Sunil Urs    15 年前

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

    我建议您在测试时尽可能禁用动画。在Visifire中,您可以通过将图表的AnimationEnabled属性设置为false来执行此操作。我不太了解其他人。在执行这些测试时,您可以通过使用大量的数据点(4K-5K)使差异更加明显。