【发布时间】:2009-07-29 15:48:36
【问题描述】:
我目前正在开发一个允许用户播放(自动滚动)一系列本地图像的应用程序。通常屏幕上会同时出现五六个。
目前的主要瓶颈似乎是从磁盘实际加载图像数据。计时器线程要求图像每 1/6 秒更新一次,而应用程序正在努力跟上这个速度。每张图片大约 25Kb。
我尝试创建一个滚动缓存来尝试预加载图像,但这也被自己赶上了,所以最终速度减慢了。
计时器的每一个节拍,我都在循环使用标准加载下一张图像的六个图像占位符
Image img = Image.FromFile("filename");
方法,但认为有人可能知道更快的方法将图像从磁盘中取出。
六组中的每组都有 500 到 20,000 张图像,因此在开始时无法将整个图像加载到内存中。
如果有人对更快地提取这些图像有任何建议,我们将不胜感激。
编辑以添加应用程序流程的更多细节。
好的,这就是正在发生的事情:
用户点击“播放”按钮。定时器线程以 1/6 秒超时开始。
定时器回调:
Update image index (_index++)
for each viewer in list of visible viewers (the forms to display images)
{
get the filename from the id stored in the viewer
check to see if the file exists
if it does exist,
create new bitmap from image
and return that image
otherwise return null
if returned image isn't null, display it on screen
}
这显然要跨越几个层 - 图像加载在服务层中进行,然后将其传递给演示文稿,然后传递给 UI,但这就是正在发生的事情的要点。
【问题讨论】: