Контекст
У нас была довольно большая утечка памяти в приложении WPF, которое мы разрабатываем, что было вызвано использованием DropShadowBitmapEffect
в библиотеке ресурсов.
Падающая тень использовалась некоторыми UserControl
и всеми нашими меню, чтобы отбрасывать тень на фактическое содержимое окна, как таковое:
<DropShadowBitmapEffect x:Key="PopupDropShadow" ShadowDepth="1.5" Softness="0.15" />
...
<Rectangle BitmapEffect="{StaticResource PopupDropShadow}" ... />
Мне пришлось профилировать приложение в течение многих часов, прежде чем я действительно нашел причину проблемы. Класс DropShadowBitmapEffect
неуправляем и не позволяет объектам быть GC'd. Также вы заметите, что DropShadowBitmapEffect
класс помечен как устаревший , и что существует обновленный класс с именем DropShadowEffect
, который фиксирует память утечка (и также аппаратно ускоряется , что значительно повышает производительность рендеринга). Вот фактическое исправление:
<DropShadowEffect x:Key="PopupDropShadow" ShadowDepth="1.5" />
...
<Rectangle Effect="{StaticResource PopupDropShadow}" ... />
Вопрос
Можно ли использовать устаревший / устаревший класс, использующий предупреждения выбросить при компиляции при использовании в XAML в Visual Studio 2010?