代码之家  ›  专栏  ›  技术社区  ›  Trav L

图像代理的性能

  •  1
  • Trav L  · 技术社区  · 15 年前

    我不擅长提出问题,请随意修改/重新标记以使其更易于理解。谢谢。

    我有一个图像代理页面可以帮助我用自定义的操作值处理对产品图像的所有请求。例如:

    http://mysite.com/ImageProxy.aspx?id={ITEM ID}&width={WIDTH}&height={HEIGHT}&gloss={GLOSS}&reflection={REFLECTION}
    

    为了减少服务器端的负载,我通过保存已经生成的图像的文件进行缓存,以便在调用具有相同操作值的相同产品时重用。

    这在开始时有效,但当在一个页面中显示更多图像时会变慢。 我想知道如何改善这种情况 或者图像代理的自然速度会变慢?

    *编辑:*

    我是:

    • 发展与 ASP.NET MVC
    • 使用 System.Drawing.Drawing2D ,请 System.Drawing.Imaging 操作图像。
    • 目前,一个页面的大小约为500kb*(结果页面的大小),每页8~10个图像,每个图像30~50kb(png)。
    • 图像目前是PNG,透明度作为反射,圆角效果作为选项,图像可能位于各种背景纯色背景上(ie/gif可能是一个选项)。
    1 回复  |  直到 15 年前
        1
  •  3
  •   Badaro    15 年前

    试试这个:

        // GetCacheFileName -> Returns the full path of the "cached" image
        // CreateImage -> Used to create a new image if necessary
        string cacheFile = GetCacheFileName(param1, param2, param3, param4);
        if (!File.Exists(cacheFile))
        {
            Image cacheImage = CreateImage(param1, param2, param3, param4);
            cacheImage.Save(cacheFile, ImageFormat.Jpeg);
        }
    
        Response.ContentType = "image/jpeg";
        Response.TransmitFile(cacheFile);
    

    这里需要注意的两件事是:

    • 告诉框架将图像保存为jpeg
    • 将文件保存到磁盘,并使用response.transmitfile而不是response.write file或response.outputstream.write