BitmapCache? Когда и как использовать? - PullRequest
9 голосов
/ 17 января 2011

У меня есть вопрос по поводу кэширования растровых изображений в приложениях silverlight для Windows Phone 7.

Когда мне его использовать?И на каких контроллерах?Должен ли я кэшировать растровые изображения детей элемента управления, который кэшируется растровое изображение?Я не уверен, как это работает, и было бы неплохо получить совет от вас, ребята.

/ Ричард

Ответы [ 3 ]

6 голосов
/ 18 января 2011

Я нашел эту ссылку , объясняющую CacheMode в Silverlight 3. Из ссылки: [Эта ссылка мертва.]

  • BitmapCache - единственный поддерживаемый режим кэширования.
  • Кэширование применяется к элементу и всем его дочерним элементам.
  • BitmapCaching следует использовать в сценариях, где вы смешиваете, трансформируете (переводите, растягиваете, вращаете).
  • Неправильное использование функции CacheMode может снизить производительность, поэтому вам нужно действительно продумать, что вы делаете. Если ваше визуальное дерево чередует кэшированные и некэшированные элементы, вы фактически создаете несколько поверхностей рендеринга за сценой. Некэшированные поверхности отображаются в программном обеспечении, а кэшированные поверхности отображаются в аппаратных средствах. Ваша производительность будет наилучшей, если вы сможете минимизировать общее количество поверхностей рендеринга и заставить аппарат работать так, как он может.
  • Вы можете определить, какие элементы кэшируются, добавив параметр EnableCacheVisualization в объявление плагина Silverlight. <param name="EnableCacheVisualization" value="true" />
  • Насколько я могу судить, ускорение GPU не происходит на Mac, когда приложение Silverlight не находится в полноэкранном режиме. Это, очевидно, ограничение модели подключаемого модуля Safari.

Интересно, можно ли включить EnableCacheVisualization для WP7, я использую BitmapCache для LongListPicker и ContentPresenter (которые я заполняю динамически создаваемым контентом), и было бы интересно узнать если кеширование работает. Но согласно 3-му пункту, вы должны использовать его, только если вы анимируете UIElement s, а я нет, так что, возможно, мне вообще не следует его использовать!

4 голосов
/ 18 января 2011

BitmapCache для большинства объектов должен быть тем, о чем вам не нужно думать в Windows Phone 7. Silverlight для WP7 реализует автоматическое растровое кэширование элементов, которые анимируются способами, которые помогают кэшированию (translate, opacity, повернуть - может быть, больше, я не могу вспомнить сейчас).

Silverlight на настольном ПК (или Mac) в настоящее время не настолько умен, поэтому вам нужно вручную указать CacheMode = BitmapCache для объектов, используя приблизительные указания, указанные Praetorian в его ответе.

Вероятно, существуют крайние случаи, когда установка BitmapCache явно полезна даже на Windows Phone, но я не знаю о них случайно. Вы можете попробовать взглянуть на Советы по повышению производительности Windows Phone на MSDN .

1 голос
/ 17 января 2011

Из того, что я видел / читал, вы хотите использовать растровое кэширование на объектах, которые могут быть дорогостоящими для рендеринга (например, множество детей или сложный макет), если вы собираетесь использовать их в переходах или анимациях.

Благодаря кэшированию растрового изображения аппаратные средства могут выполнять переходы + анимацию быстрее / плавнее.

Я думаю вам просто нужно поместить его в самый верхний элемент / родительский элемент, где вы применяете преобразование или анимацию? Кто-то скоро придет, чтобы поправить меня, я уверен:)

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