Я люблю делать эффективные приложения и часто смотреть на параллелизм и многопоточность, чтобы улучшить быстродействие приложений и т. Д., Но в последнее время мои попытки всегда кажутся заблокированными однопоточным WPF. Независимо от того, насколько эффективен и параллелен мой код, WPF, похоже, постоянно останавливает мой пользовательский интерфейс и делает мое приложение невероятно невосприимчивым - иногда ожидание визуализации окна может занять драгоценные секунды (где даже курсор мыши не будет перемещаться). Я нахожу это расстраивающим, поскольку кажется, что я ничего не могу сделать, чтобы ускорить процесс.Обход узкого места WPF-рендеринга
Мой вопрос, то есть is Есть ли что-нибудь, что я могу сделать, чтобы улучшить отзывчивость в моем приложении WPF? Мои окна, как правило, довольно сложны по стилю и композиции, и я уже использую виртуализацию StackPanels.
Чтобы проиллюстрировать мою проблему: у меня есть текстовое поле, которое действует как окно поиска, и я хочу, чтобы результаты отображались «на лету» как пользовательские типы (каждый результат инкапсулируется в UserControl и отображается в ItemsControl). Я использую фоновые потоки для выполнения поиска. Проблема в том, что когда WPF отображает результаты поиска, который полностью блокирует пользовательский интерфейс, чтобы печатать на несколько секунд за раз, в то время как WPF отбирается, делая все «результаты по мере ввода» не очень жизнеспособными.
Можно ли каким-либо образом избежать обхода нити пользовательского интерфейса при рендеринге WPF?
Это звучит не так, вы можете заставить приложение выполнять всю работу, производить все результаты поиска, но в конце всегда отображается пустой список? таким образом вы можете увидеть, действительно ли это связано с рендерингом. Кроме того, есть много накладных расходов при передаче по нескольким каналам, вы всегда передаете весь список обратно в поток пользовательского интерфейса для рендеринга всего за один вызов? (добавление элементов в коллекцию в фоновом потоке, которые будут отправлять отдельные уведомления, убьет вас) – Nir
Хм, вы можете быть на что-то. Когда я отключу изменение списка результатов, все еще существует некоторое очевидное отставание, которое не должно происходить. Я рассмотрю это - спасибо за идею. – devios1
Спасибо Nir - ваша идея закончилась тем, что выявила серьезное замедление, которое происходило в потоке пользовательского интерфейса, которое я раньше не заметил. Перемещение этого в поток поиска значительно улучшило отзывчивость. Так что все не так плохо, как казалось на первый взгляд. :) – devios1