Производительность Image Proxy - PullRequest
1 голос
/ 17 декабря 2009

Я не умею ставить вопрос, не стесняйтесь перефразировать / пометить это, чтобы сделать его более понятным. Спасибо.

У меня есть страница прокси изображений, которая помогает мне обрабатывать все запросы к изображениям продукта с помощью пользовательских значений манипуляций. Например:

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 для работы с изображениями.
  • В настоящее время размер страницы составляет около ~ 500 КБ * (страницы результатов) с 8 ~ 10 изображений на страницу и 30 ~ 50 КБ (PNG) для каждого изображения.
  • изображение в настоящее время PNG с прозрачностью в виде эффектов отражения и закругленных углов, поскольку в качестве опции и изображения могут находиться на различных цветах сплошного фона (то есть / GIF может быть опцией).

1 Ответ

3 голосов
/ 17 декабря 2009

Попробуйте это:

    // 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.WriteFile или Response.OutputStream.Write
...