Низкая производительность библиотеки автоматизации пользовательского интерфейса Microsoft - PullRequest
2 голосов
/ 05 августа 2011

В настоящее время я пытаюсь автоматизировать приложение Windows Forms с помощью библиотеки автоматизации пользовательского интерфейса Microsoft и C #, но у меня большие проблемы с производительностью.Идентификация отдельных элементов с помощью PropertyCondition или итерации по всем элементам окна занимает очень много времени (до 4 минут).Как только у меня появляется AutomationElement, все в порядке (например, GetCurrentPropertyValue реагирует в течение 100 мс).

Низкая производительность относится только к одному приложению.У меня нет доступа к источнику, но если что-то нужно изменить или проверить, я могу поговорить с ответственным программистом.Насколько я знаю, некоторые события (например, рисование) были перезаписаны для приложения.Типичное окно приложения содержит около 100 элементов, которые обнаруживаются методом FindAll.

Я также попробовал COM-интерфейс библиотеки автоматизации пользовательского интерфейса, который примерно в два раза быстрее, но на самом деле это не так.решить проблему.

Кто-нибудь есть идеи, как решить эту проблему или испытал подобное поведение?

1 Ответ

1 голос
/ 10 августа 2011

Мы нашли ответ, когда познакомились с основным циклом. В большинстве случаев Application.Run используется для запуска главного окна и запуска приложения, но по какой-то причине использовался следующий код:

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

Поскольку библиотека автоматизации пользовательского интерфейса Microsoft использует оконные сообщения, все System.Threading.Thread.Sleep (10); Подводя итог и сделал обнаружение объекта стало очень медленно. Этого не происходит, если используется Application.Run.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...