Заморозка рендеринга WPF - PullRequest
9 голосов
/ 31 марта 2011

У меня проблема с зависанием графического интерфейса пользователя, связанная с рендерингом аппаратного или программного интерфейса.

Контекст: 2 приложения WPF (.NET 3.5 с пакетом обновления 1), работающие на машине со встроенным XP-дисплеем с двумя дисплеями (DirectX 9.0c).

В какой-то момент одно из этих приложений зависает. Но только рендеринг: графический интерфейс остается активным (насос сообщений активен, приложение отзывчиво), но рендеринг не выполняется. Замораживание может длиться секунды или навсегда. Второе приложение продолжает работать нормально. Ошибка возникает только в конфигурации с двумя дисплеями, второе приложение является своего рода катализатором (больше памяти и загрузка процессора ...)

Используя Perforator, я вижу, что использование видеопамяти постоянно увеличивается и уменьшается (см. снимок экрана ). В течение этого времени один собственный поток потребляет 100% ЦП (трассировка стека включает WPFgfx, DirectX, GDI и видеодрайвер)

Обычно, когда приложение размораживается, оно полностью отображается программно (фиолетовый оттенок с помощью Perforator). Кроме того, деактивация аппаратного рендеринга размораживает приложение.

На данный момент я пришел к выводу, что у меня нехватка видеопамяти (как описано в пункте №14 в этом посте ), с попыткой откатиться до программного рендеринга, но цикл где-то пытается снова в аппаратном режиме.

Я прав? Будет ли это скорее проблема WPF или проблема с драйвером видео? или даже DirectX? Есть ли какие-то параметры, которые я могу настроить вокруг этого?

1 Ответ

7 голосов
/ 31 марта 2011

Я прав? Будет ли это скорее проблема WPF или проблема с драйвером видео? или даже DirectX? Есть ли какие-то параметры, которые я могу настроить вокруг этого?

Это похоже на проблему с драйверами. Я бы начал с просмотра обновлений драйверов. Лучшим вариантом может быть просто отключить аппаратное ускорение, так как WPF (особенно на XP) действительно зависит от графических драйверов.

Visual Studio 2010 sp1 отключил аппаратное ускорение для себя на XP именно по этой причине ...

...