【问题标题】:Measuring the load time of individual GUI elements测量单个 GUI 元素的加载时间
【发布时间】:2015-06-23 17:46:44
【问题描述】:

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

我正在使用按钮的单击事件来生成 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

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

【问题讨论】:

  • 超级问题是“你为什么要这样做?” - 你打算达到什么目标?
  • @peter 好吧,来测量不同 GUI 元素的加载时间。这样做的原因是更具学术性让我们说

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


【解决方案1】:

现在您正在测量构建两个对象(ButtonSolidColorBrush)、设置各种属性、将一些东西插入向量(事件处理程序和子对象)等,但我没有当您调用Stop 时,t 认为该按钮实际上是可见的(可能还有布局和渲染通道)。所以你正在测量一些随机的东西。

副手(无论如何我都不是 XAML 性能专家)+/- 1ms 挂钟时间的差异用于添加考虑到您的测量方式,ButtonGrid 似乎是合理的(例如,您的计算机同时还在做什么?)。如果要进行性能分析,请使用性能分析器工具。

【讨论】:

  • 感谢您的回复,但是使用 Visual Studio 的性能分析工具不会比这包含更多的随机性吗?
  • 它会告诉你事情实际花费了多少 CPU 时间,而不是挂钟时间。但是除了好奇心之外,这仍然不会作为数据非常有用。
  • 我明白了...感谢您的帮助,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多