我的图像是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
我的问题是,是否有更有效的方法可以做到这一点和/或我是否应该这样做。
另外,我不能/不会使用任何客户端缓存技术。
由于
答案 0 :(得分:2)
这个问题没有快速简单的答案,但我建议你不要把事情放在'应用程序'除非你真的需要。
HttpContext.Current.Cache是更好的选择。 Application不是缓存,它是一个全局命名值集合:如果向Application添加一个对象,它将保持到应用程序池循环。
更重要的是(来自文档,here):
应用程序状态是自由线程,表示应用程序状态 许多线程可以同时访问数据。因此它是 重要的是确保在您更新应用程序状态数据时 通过包含内置同步,以线程安全的方式 支持。您可以使用Lock和UnLock方法来确保数据 通过锁定数据进行完整性只需要一个源写入 时间。您还可以降低并发问题的可能性 在Application_Start方法中初始化应用程序状态值 在Global.asax文件中。
请勿在Application对象中存储图像。请。