Оптимизация WinUI ListViewC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Оптимизация WinUI ListView

Сообщение Anonymous »

Я пытаюсь написать элемент управления пользовательского интерфейса типа списка в WinUI3, используя ListView, и сталкиваюсь с некоторыми проблемами с производительностью: когда я начинаю добавлять много строк в свой список (более 500), он становится очень медленным и по существу блокирует мой пользовательский интерфейс.
Насколько я понимаю, каждый вызов .Append() запускает обновления макета пользовательского интерфейса, и это перегружает поток пользовательского интерфейса. Мне интересно, что можно сделать, я попробовал выгрузить вызовы .Append() в другой поток, и это предотвращает блокировку моего пользовательского интерфейса, но он по-прежнему довольно медленный, заполнение списка из 1000 строк занимает несколько секунд.
Еще одна вещь, которую я задавался: можно ли как-то отложить эти изменения макета, а затем разрешать их только при прокрутке списка вниз или что-то в этом роде, но я не знаю, возможно ли это как-то возможно.
Вот XAML: И я добавляю строки вот так:

Код: Выделить всё

    IObservableVector m_list = single_threaded_observable_vector();

for (int i = 0; i < 1000;  ++i) {
auto item = winrt::single_threaded_map();
item.Insert(L"Name", box_value(to_hstring(L"")));
item.Insert(L"Age", box_value(to_hstring(L"")));
item.Insert(L"Occupation", box_value(to_hstring(L"")));
item.Insert(L"Address", box_value(to_hstring(L"")));
item.Insert(L"Bank", box_value(to_hstring(L"")));
item.Insert(L"BankAccountNumber", box_value(to_hstring(L"")));
m_list.Append(item);
}

auto listView = p.FindName(L"MyListView").as();
listView.ItemsSource(m_list);
У меня также необычная настройка: это не собственное приложение WinUI3, я использую MddBootstrapInitialize для загрузки WinAppSDK в приложении Win32. Заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/797 ... i-listview
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»