Microsoft UI自动化库的性能不佳

时间:2011-08-05 09:16:26

标签: performance user-interface automation

我目前正在尝试使用Microsoft UI自动化库和C#自动化Windows窗体应用程序,但我在性能方面存在很大问题。使用PropertyCondition标识单个元素或迭代窗口的所有元素需要很长时间(最多4分钟)。只要我有AutomationElement,一切都很好(例如GetCurrentPropertyValue在100毫秒内做出反应)。

性能不佳仅适用于一个应用程序。我无权访问源代码,但如果需要更改或检查某些内容,我可以与负责的程序员交谈。据我所知,有些事件(例如油漆)被覆盖了。应用程序的典型窗口包含约{100}个元素,这些元素可通过FindAll方法找到。

我也尝试过UI自动化库的COM接口,大约快了两倍,但这并没有真正解决问题。

有没有人知道如何解决这个问题或遇到过类似的行为?

1 个答案:

答案 0 :(得分:1)

当我们仔细观察主循环时,我们找到了答案。在大多数情况下,Application.Run用于启动主窗口并运行应用程序但由于某种原因使用了以下代码:

[...]    
    MainForm.Show();
    while DoStop == false
    {
        System.Threading.Thread.Sleep(10);
        Application.DoEvents();
    }
[...]

由于Microsoft UI Automation Library使用窗口消息,所有System.Threading.Thread.Sleep(10);总结并使对象检测变得非常慢。如果使用Application.Run,​​则不会发生这种情况。