繁体   English   中英

生成的用户控件的图形缓存

[英]Graphics caching for Generated user controls

这个问题专门针对 .net CF,但它应该适用于任何缓慢的过时系统。

我编写了一个自定义 ListPanel 类型 object ,其中包含自定义 ListItem 类型对象。 每个 ListItem 包含 0-5 个不同的图形和 1-4 个不同的文本集(每组文本具有不同的字体或颜色)。 每件商品的尺寸也在 480x14-480x800 之间(WxH)

ListPanel object 有一个类型为Bitmap的缓冲区,它是用于双缓冲的手机屏幕大小(通常为 480x800)。 每个 ListItem 也有一个 Buffer,它是项的大小(这是因为 ListItem 在创建后很少更改)。 ListPanel 将其 Buffer 的 Graphics object 发送到其所有 ListItem,每个 ListItem 使用它来绘制其 Buffer Bitmap。 在所有可见项都用 Graphics Object 自己绘制之后,面板的 Buffer 被绘制到屏幕上

平均列表包含 10-27 项。

关于这个缓冲区缓存模式,我有几个问题。
首先,保存这么多缓冲区是否过度杀戮? 在一个包含 26 个对象的列表中,memory 中至少有 28 个位图,这在 .net CF 上是很大的空间。 如果这太过分了,那么渲染屏幕的更好方法是什么(考虑到最坏的情况 ListItem 将绘制 6 个图形和 4 组具有不同字体的文本)。

此外,还有一些重复出现的图形(作为嵌入式资源存储或在本地复制到 output 目录并作为文件读入),我想知道将这些图像保存在 memory 中是否更好或读取/关闭它们以每次使用?

最后,(假设上面的项目)我应该什么时候渲染 ListItem 的缓冲区? 我应该在项目的 ctor 中呈现它还是在项目第一次进入显示器时呈现它? 在 ctor 中渲染 Buffer 会在创建页面时造成延迟,但在用户滚动时会更流畅。 首次显示时渲染可能会导致滚动不流畅,但页面加载速度更快,并且某些看不到的项目不需要加载到 memory

任何指导都会很棒

我认为你应该看看这个 SO question的接受答案。 例如,适用于您的案例的一个小片段说:“避免在表单的 ctor 中做大量工作 - 为延迟加载或在后台线程中卸载它”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM