2

我有一张 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

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

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

谢谢

4

1 回答 1

2

这个问题没有快速简单的答案,但我建议你避免将东西放在“应用程序”中,除非你真的需要。

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

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

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

请不要将图像存储在 Application 对象中。请。

于 2013-10-04T18:35:26.893 回答