Мы работаем с базой MS UIA и заметили, что, как представляется, значительное замедление при поиске коллекций объектов в Windows 10/.NET 4.6.Проблема с производительностью AutomationElement.FindAll()
При тестировании AutomationElement.FindAll() в ящике Windows 10/.NET 4.6 наши времена в среднем примерно в 3-5 раз дольше находят коллекции элементов, чем при поиске одинаковых элементов на Windows 8.1/.NET 4.5.1. Мой тест против WPF DataGrid с виртуализацией (с использованием утилизации) и получение всех ячеек внутри каждой строки DataGrid.
В нашем окне Win10 каждый вызов FindAll для получения ячеек в каждой строке занимает примерно 30 - 50 мс или даже дольше. В поле Win8.1 он занимает около 5 - 10 мс. Я не могу понять, почему, но я не думаю, что проблема ограничивается DataGrid, поскольку нет ничего необычного в нашем вызове FindAll().
//get grid
AutomationElement gridElement = AutomationElement.RootElement.FindFirst(TreeScope.Descendants,
new PropertyCondition(AutomationElement.AutomationIdProperty, "dataGridAutomationId"));
//get all visible rows
AutomationElementCollection dataItems = gridElement.FindAll(TreeScope.Descendants,
new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.DataItem));
foreach (AutomationElement dataItem in dataItems)
{
if (!string.IsNullOrEmpty(dataItem.Current.Name))
{
//call under test
AutomationElementCollection cells = dataItem.FindAll(TreeScope.Children,
new PropertyCondition(AutomationElement.ClassNameProperty, "DataGridCell"));
}
}
Использование AutomationElement.RootElement предназначено только для тестирования. Вызов 'dataItem.FindAll() - это то, что я тестирую.
Win 8.1 и Win10 машина спецификации:
- Xeon W3670 3.20GHz процессор
- 12GB баран
- 64bit OS
Мы попытались использовать неуправляемый MS Uia API с помощью ком упаковки и не видел заметных улучшений производительности на Win10.
Любой совет будет очень благодарен.
Вы сравнили структуру datagrid между win8.1 и win10 уже? (Например, с inspect.exe). Интересно, может ли win10 использовать для этого другую структуру? не уверен, что это возможно. – Hansa
Согласно проверке структура datagrid идентична. – Jordan