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

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

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

/Ричард

3 ответов


нашел этой ссылке объяснением CacheMode в Silverlight 3. От соединения: [Эта связь мертва.]

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

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


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

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

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


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

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

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