ディスクから何百もの画像を読み取り、それらを処理して単一の画像を生成するグラフィックプロセスを最適化しようとしています。最適化しようとしているプロセスは、ディスクから画像を何度も読み取ることであり、検討しているオプションの 1 つです。メモリ内の画像を読み込んでキャッシュしています。最も単純な形式では、次のように辞書を使用したいと考えています。
アップデート:
- ディスク上のイメージは変更されません
- 最終アクセスのタイム スタンプを使用して、使用頻度の低いアイテムをキャッシュから期限切れにするプロセスがあります。
- 今のところ、シングル スレッド プロセスです。
- 平均画像サイズは約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()
}
}