BitmapCache? Когда и как использовать?

У меня есть вопрос о растровом кэшировании в приложениях Windows Phone 7 Silverlight.

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

/Ричард

3 ответа

Решение

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам