Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在IIS服务器上缓存大型映像的最佳方法_C#_Asp.net_Image_Caching - Fatal编程技术网

C# 在IIS服务器上缓存大型映像的最佳方法

C# 在IIS服务器上缓存大型映像的最佳方法,c#,asp.net,image,caching,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["MyL

我有一个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
我的问题是是否有更有效的方法来做这件事和/或我是否绝对不应该这样做

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


谢谢

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

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

更重要的是(从文件中,):

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


请不要在应用程序对象中存储图像。请。

为什么不将图像大小调整为较小的大小,并保持这种方式?首先不要使用
应用程序
变量,它是静态的,并保留在内存中。例如。这不是最好的方法。你试过使用HttpContext.Current.Cache吗?另外:你没有征求关于图像处理程序的建议(我知道我听起来像个傻瓜),但请不要自己写。使用类似以下内容:。实际上,有数百种方法可以使图像处理变得糟糕。你可能做错了。嗨,达姆,谢谢你的信息。这不是我会选择做的事情,也不是我曾经考虑过的事情,因为我通常不会进入这个阶段。我知道它是自由线程的,并且已经围绕这个“对象”实现了锁。幸运的是,我成功地说服了我的PM放弃这种方法,现在我已经实现了将大图像从现在可以通过URL访问的off中分离出来。感谢上帝@各位,请注意我在这里扮演“魔鬼代言人”。我知道将图像存储到应用缓存是个坏主意。我只是想要一个小男孩。备选方案(在这个特殊的场景中,我自己也被困在其中)和b)。向我的首相提出很好的论据。我很高兴大家都同意这是个坏主意:)