如何缓存处理程序图像?

时间:2013-11-14 04:22:25

标签: c# asp.net sql handler

我有blob数据的大约85000个图像我从处理程序生成它并存储在数据库中作为图像数据类型现在当我将其渲染到网页时它工作得很慢很明显所以我想找到一个中间解决方案这个可能< strong>缓存我觉得它对我来说是一个最好的解决方案,所以任何人都可以给我一些关于这个问题的看法我的代码看起来像这样

public void ProcessRequest(HttpContext context)
    {

context.Response.OutputStream.Write(buffer, 0, byteSeq);
                byteSeq = strm.Read(buffer, 0, 8192);
}

和图片

     <img  src='<%# "handler/product?"+Email.Encryptdes(DataBinder.Eval(Container.DataItem,"product_id").ToString()) %>'/>

所以该怎么办我现在无法在30秒内看到我的页面加载 我应该选择图片的文件夹选项吗?

2 个答案:

答案 0 :(得分:4)

您可以在处理程序本身中设置缓存,如下所示

context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(10));

因此,如果浏览器要求提供相同的数据,则会缓存10分钟。

为了进一步改进,您可以将图像保存在本地文件夹中,然后设置路径。

几条有用的链接

  1. How to use output caching on .ashx handler
  2. Cache an object in a .ashx handler
  3. How to server-side cache ASP.NET custom HttpHandler response

答案 1 :(得分:1)

您最好的方法是存储images in folders and the paths in the database

下一个选项是检查在一个页面加载上下载的图像的总大小。尝试将此最多减少到大约10张图像;将Repeater的页面大小设置为10.

您还可以添加缓存,但这不会以任何方式帮助加快访问您网站的所有人的第一页加载速度,这是第一次计算的展示次数。

最后,将处理程序的IsReusable属性设置为false,除非您对multi-threading问题的可能性进行防御性编码。