我目前正在尝试使用Microsoft UI自动化库和C#自动化Windows窗体应用程序,但我在性能方面存在很大问题。使用PropertyCondition
标识单个元素或迭代窗口的所有元素需要很长时间(最多4分钟)。只要我有AutomationElement
,一切都很好(例如GetCurrentPropertyValue
在100毫秒内做出反应)。
性能不佳仅适用于一个应用程序。我无权访问源代码,但如果需要更改或检查某些内容,我可以与负责的程序员交谈。据我所知,有些事件(例如油漆)被覆盖了。应用程序的典型窗口包含约{100}个元素,这些元素可通过FindAll
方法找到。
我也尝试过UI自动化库的COM接口,大约快了两倍,但这并没有真正解决问题。
有没有人知道如何解决这个问题或遇到过类似的行为?
答案 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,则不会发生这种情况。