测量各个GUI元素的加载时间

时间:2015-06-23 17:46:45

标签: android ios performance user-interface windows-phone-8.1

我正在编写一个程序来测量每个GUI元素的加载时间(如按钮,文本框等)。现在我正在使用Windows Phone,我计划将其扩展到Android和iOS(可能使用swift,仍然未定)和Java桌面。

我正在使用按钮的click事件来生成GUI元素(在这种情况下是一个按钮)

private void btnCreate_Click(object sender, RoutedEventArgs e)
{
    CleanUp(); // to Garbage collect

    watch.Start();
    Button btn = new Button();
    btn.Width = 110;
    btn.Height = 56;
    btn.Foreground = new SolidColorBrush(Windows.UI.Colors.White);
    btn.Content = "Button";
    btn.Click += btn_Click;
    gridMain.Children.Add(btn);
    watch.Stop(); 
}

我使用不同的按钮,在其事件处理程序中使用以下代码来显示结果

private void btnResults_Click(object sender, RoutedEventArgs e)
{
    long ticks = watch.ElapsedTicks;
    double ms = 1000.0 * (double)ticks / Stopwatch.Frequency;
    // show results in a message box
}

我还有一个按钮来删除生成的按钮和垃圾收集,以便我可以删除并重新创建并获取多个读数

private void btnRemove_Click(object sender, RoutedEventArgs e)
{
    gridMain.Children.RemoveAt(3); //the dynamically generated button is at 3
    watch.Reset();
}

问题在于我得到了一些不一致的结果。 以下是我的一些结果(不包括第一次运行):

0.6028 ms
0.7217 ms
0.9596 ms
1.3834 ms
0.5626 ms
1.3814 ms
0.7343 ms

我不明白原因。这显着不一致吗?如果是,那么我的方法是否有缺陷?有一个更好的方法吗?感谢

1 个答案:

答案 0 :(得分:1)

现在你正在测量构建两个对象(ButtonSolidColorBrush),设置各种属性,将几个东西插入向量(事件处理程序和子对象),等等,但是当你打电话给Stop时,我不认为按钮实际上是可见的(可能还有布局和渲染过程)。所以你要测量一些随机的东西。

副手(和我不是任何想象力的XAML指挥大师)方差+/- 1ms 挂钟时间根据您的测量方式(例如,您的计算机还在同一时间做什么?),将Button添加到Grid似乎是合理的。如果要进行性能分析,请使用性能分析器工具。