我正在尝试优化从磁盘读取数百个图像,处理它们并生成单个图像的图形过程,我尝试优化的过程是一遍又一遍地从磁盘读取图像,我正在考虑的选项之一正在读取和缓存内存中的图像。以最简单的形式,我想使用如下字典。
更新:
- 磁盘上的图像不会改变
- 将有一个过程使用上次访问的时间戳从缓存中过期较少使用的项目
- 现在它的单线程进程。
- 平均图像大小约为 400KB
- 物理内存大小为 16GB
这是个好主意吗?最重要的是它会起作用吗?
public class ImageCache
{
protected Dictionary<string, System.Drawing.Image> ImageStore = new Dictionary<string, System.Drawing.Image>(10000);
public System.Drawing.Image Get(ImageReference imgRef)
{
System.Drawing.Image image;
if (!ImageStore.TryGetValue(imgRef.Key, out image))
image= CacheImageFromDisk(imageRef);
return image;
}
System.Drawing.Image CacheImageFromDisk(ImageReference imgRef)
{
using (var f = new FileStream(imgRef.Path, FileMode.Open, FileAccess.Read, FileShare.Read))
{
var img=Image.FromStream(f);
ImageStore.Add(imgRef.Key,img);
return img;
}
}
~ImageCache()
{
//Dispose each item in ImageStore and calll GC.Collect()
}
}