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.
Из того, что я видел / читал, вы хотите использовать растровое кэширование на объектах, которые могут быть дорогостоящими для рендеринга (например, много детей или сложный макет), если вы собираетесь использовать их в переходах или анимациях.
Благодаря растровому кэшированию аппаратное обеспечение может выполнять переходы + анимацию быстрее / плавнее.
Я думаю, вам просто нужно поместить его в самый верхний элемент / родительский элемент, где вы применяете преобразование или анимацию? Кто-то скоро придет, чтобы поправить меня, я уверен:)