在IIS服务器上缓存大图像的最佳方法

时间:2013-10-04 15:37:46

标签: c# asp.net image caching

我的图像是2900x2379。 我创建了一个asp.net ashx处理程序,它将加载此图像并从中裁剪一个较小的图像并将该裁剪作为流返回。

在伪代码中我在处理程序中有这个...:

Bitmap LargeBMPToUse = null;
if (Application["MyLargeImage]" == null)
{
LargeBMPToUse  = new Bitmap("File location of image on my server");
Application["MyLargeImage"] = LargeBMPToUse;
}

//now crop image from LargeBMPToUse  and return its stream

我的问题是,是否有更有效的方法可以做到这一点和/或我是否应该这样做。

另外,我不能/不会使用任何客户端缓存技术。

由于

1 个答案:

答案 0 :(得分:2)

这个问题没有快速简单的答案,但我建议你不要把事情放在'应用程序'除非你真的需要。

HttpContext.Current.Cache是更好的选择。 Application不是缓存,它是一个全局命名值集合:如果向Application添加一个对象,它将保持到应用程序池循环。

更重要的是(来自文档,here):

  

应用程序状态是自由线程,表示应用程序状态   许多线程可以同时访问数据。因此它是   重要的是确保在您更新应用程序状态数据时   通过包含内置同步,以线程安全的方式   支持。您可以使用Lock和UnLock方法来确保数据   通过锁定数据进行完整性只需要一个源写入   时间。您还可以降低并发问题的可能性   在Application_Start方法中初始化应用程序状态值   在Global.asax文件中。

请勿在Application对象中存储图像。请。