WPF - динамические и статические ресурсы - PullRequest
3 голосов
/ 10 мая 2009

Я испытываю огромную утечку памяти в своем проекте WPF и пытаюсь выяснить, что я могу сделать, чтобы минимизировать ее. Для доступа к ресурсам я использую StaticResource 100% времени. Должен ли я использовать DynamicResource, где я могу? Есть ли преимущества в управлении памятью между StaticResource и DynamicResource?

К вашему сведению: у меня есть список, показывающий данные через шаблон данных. Когда пользователь прокручивает вверх / вниз, память быстро увеличивается, достигая 1 ГБ всего за пару минут прокрутки вверх / вниз.

Ответы [ 2 ]

3 голосов
/ 10 мая 2009

Вряд ли это будет StaticResource / DynamicResource. Статические и динамические относятся к стратегиям поиска, а не стратегиям хранения:

  • StaticResource означает "искать один раз, затем просто продолжайте использовать то же значение. "

  • DynamicResource означает «искать ресурс каждый раз, когда это необходимо, в case значение изменилось. "

То, что вы делаете, поэтому звучит правильно: используйте StaticResource для неизменных ресурсов, таких как DataTemplates (и резервируйте DynamicResource для ресурсов, которые могут изменяться, например, системных кистей, которые могут измениться, если пользователь изменяет цветовую схему системы). Выделение DataTemplate через ссылку StaticResource будет стоить не больше памяти, чем выделение его через ссылку DynamicResource, и в долгосрочной перспективе это будет дешевле, поскольку WPF не нужно постоянно возвращаться и переоценивать ссылку.

Что более вероятно, так это то, что сам ваш шаблон делает что-то, что, когда шаблон применяется (создается для элемента данных), выделяет память (или косвенно вызывает выделение памяти) с утечкой. Одна нелогичная причина, которую я видел, заключается в том, что шаблон использует растровые эффекты в старом стиле. Другой случай, если шаблон вызывает программный код, который подключает обработчики событий. Но ни один из них, вероятно, не будет затронут тем, как вы ссылаетесь на ресурс шаблона.

0 голосов
/ 13 апреля 2010

Насколько я знаю, операционная система клиента очень важна.

WPF предназначен для работы с Vista и более поздними системами (Windows 7). У вас могут быть проблемы с производительностью с пользователями xp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...