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-й пуле, вы должны использовать его только в том случае, если вы анимируете UIElement
s, которым я не являюсь, так что, возможно, я не должен использовать его вообще!
BitmapCache должен для подавляющего большинства объектов быть тем, о чем вам не нужно думать в Windows Phone 7. Silverlight для WP7 реализует автоматическое кэширование растровых элементов, которые анимируются таким образом, что кэширование помогает (перевод, непрозрачность, поворот-может быть, больше, я не могу вспомнить сейчас).
Silverlight на настольном ПК (или Mac) в настоящее время не так умен, поэтому вам нужно вручную указать CacheMode=BitmapCache на объектах, используя примерно руководство, на которое указывает Преторианец в своем ответе.
вероятно, есть крайние случаи, когда установка BitmapCache явно полезна даже на Windows Phone, но я не знаю о них навскидку. Вы можете попробовать посмотреть на советы по производительности Windows Phone на MSDN.
из того что я видел/читал, вы хотите использовать кэширование объектов, которые могут быть дорогими, чтобы сделать (как много детей, или сложный макет) если вы собираетесь использовать их в переходах или анимации.
с кэшированием растровых изображений оборудование может выполнять переходы+анимацию быстрее / плавнее.
Я думаю вам просто нужно поместить его на самый верхний элемент / родительский элемент, где вы применяете преобразование или анимацию? Кто-нибудь скоро придет. поправьте меня, я уверен:)