缓存http处理程序.ashx输出

时间:2009-11-03 20:33:50

标签: asp.net caching httphandler

我正在创建一个包含一些文本的图像,对于每个客户,图像都包含它们的名称,我使用Graphics.DrawString函数动态创建它,但是我不需要多次创建这个图像,因为客户的名字几乎不会改变,但我不想将其存储在磁盘上。

现在我在处理程序中创建图像,即:

<asp:Image ID="Image1" runat="server" ImageUrl="~/imagehandler.ashx?contactid=1" />

缓存返回的图像的最佳方法是什么?我应该缓存它创建的位图吗?或者缓存我传回的流?我应该使用哪个缓存对象,我收集有很多不同的方法?但输出缓存对http处理程序不起作用吗?推荐的方式是什么? (我对客户端的缓存不感到烦恼,我在服务器方面也很感激)谢谢!

2 个答案:

答案 0 :(得分:5)

我能想到的最简单的解决方案是在你在图像处理程序中创建它之后将Bitmap对象缓存在HttpContext.Cache中。

private Bitmap GetContactImage(int contactId, HttpContext context)
{
    string cacheKey = "ContactImage#" + contactId;
    Bitmap bmp = context.Cache[cacheKey];

    if (bmp == null)
    {
         // generate your bmp
         context.Cache[cacheKey] = bmp;
    }

    return bmp;
}

答案 1 :(得分:1)

大卫,

您可以在处理程序上使用输出缓存。不是声明性的,而是代码背后的。 看看你是否可以使用以下代码段。

TimeSpan refresh = new TimeSpan(0, 0, 15);
HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.Add(refresh));
HttpContext.Current.Response.Cache.SetMaxAge(refresh);
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Server);
HttpContext.Current.Response.Cache.SetValidUntilExpires(true);

//try out with – a simple handler which returns the current time

HttpContext.Current.Response.ContentType = "text/plain";
HttpContext.Current.Response.Write("Hello World " + DateTime.Now.ToString("HH:mm:ss"));