Этот вопрос специально для .net CF, но он должен применяться к любой медленной, архаичной системе.
Я написал собственный объект типа ListPanel, который содержит пользовательские объекты типа ListItem.Каждый ListItem содержит 0-5 различных графических элементов и 1-4 различных набора текста (каждый набор текста имеет свой шрифт или цвет).Каждый элемент также имеет размер 480x14-480x800 (ШхВ)
Объект ListPanel имеет буфер типа Bitmap
, который представляет собой размер экрана телефона (обычно 480x800), который используется для двойной буферизации.Каждый ListItem также имеет буфер, который является размером элемента (это потому, что ListItems редко изменяются после их создания).ListPanel отправляет свой объект Graphics буфера всем своим элементам ListItems, и каждый элемент ListItem использует его для рисования своего растрового изображения буфера.После того, как все видимые элементы нарисованы с помощью графического объекта, буфер панели отображается на экране
Средний список содержит 10-27 элементов.
У меня есть несколько вопросов относительно этого буферашаблон кэширования.
Во-первых, нужно ли убить слишком много буферов?В списке из 26 объектов в памяти содержится не менее 28 растровых изображений, что в .net CF занимает много места.Если это слишком много, то какой будет лучший способ рендеринга экрана (учитывая, что в худшем случае ListItem будет рисовать 6 графических изображений и 4 набора текста с разными шрифтами).
Кроме того, имеется несколько повторно восстанавливаемых графических изображений (хранящихся либо как встроенный ресурс, либо локально скопированных в выходной каталог и считанных в виде файла), и я хочу знать, лучше ли сохранять эти изображения в памятиили читать / закрывать их для каждого использования?
Наконец (при условии пунктов выше), когда я должен рендерить буфер ListItem?Должен ли я отобразить его в ctor элемента или в первый раз, когда элемент появляется на дисплее?Визуализация буфера в ctor приведет к задержке при создании страницы, но будет более плавной, когда пользователь прокручивает страницу.Рендеринг при первом отображении может быть изменен для прерывистой прокрутки, но страница загружается быстрее, и некоторые невидимые элементы не нужно загружать в память
Любое руководство будет превосходным