Утечки памяти WPF DropShadowEffect и Blur - программирование
Подтвердить что ты не робот

Утечки памяти WPF DropShadowEffect и Blur

Я пишу приложение, которое по сути представляет собой кучу свободных экранов xaml - без кода, просто динамически связанного с ViewModel во время выполнения.

При запуске этого за выходные на старом ПК произошел сбой. Трассировка и воссоздание показали, что в igdumd32.dll произошла утечка памяти (dll для графического драйвера Intel). После небольшого исследования я написал 2 простых автономных приложения с очень простой анимацией на центральном экране. 1 без эффектов и 1 с эффектом dropshadoweffect в анимации - никаких других изменений, буквально изменение 1 строки для первого приложения (xaml довольно многословно, иначе я бы разместил его здесь). Я пропустил их через инструмент профилирования памяти redgate в течение 40 минут. 1-й из них был прекрасным: enter image description here, но второй имел заметную утечку памяти на igdumd32.dll и память, выделенную управляемым кодом: enter image description here

Еще одна вещь, которую я заметил, это то, что этого не происходит на новом ПК. Глядя на версии igdumd32.dll - более старый компьютер имеет версию 2009 года (8.15.10.1930), тогда как новый (рабочий) ПК имеет версию 2012 года (8.15.10.2639).

Кто-нибудь еще испытал это? Мои мысли касаются только специальных эффектов в xaml, когда чипсеты/драйверы могут справиться с этим, но я не могу найти что-либо в Интернете или на MSDN, которое говорит мне об аппаратных или драйверовных ограничениях для этих эффектов (не говоря уже о том, что Hardware Acceleration требуемый для них, или мой процессор поднимется).

4b9b3361

Ответ 1

Эффекты DropShadow и Blur в предыдущих итерациях WPF были реализованы в программном обеспечении (в самом WPF, то есть), и, вероятно, не будет иметь этой проблемы утечки памяти. Позже (4.0 и выше) немного изменился синтаксис и добавлена ​​возможность отключить эти эффекты к графическому оборудованию. Хотя это увеличивает скорость выполнения, он также становится зависимым от графического драйвера, чтобы избежать утечки памяти. Вы можете изменить свой код, чтобы реализовать их в самом WPF или, как уже есть, - обеспечить жесткий код - посмотрите на графический драйвер.