C#图像生成器 - 性能缓慢

Alk*_*kie 5 c# asp.net performance image-processing

我最近一直工作在C#一个aspx动态图像生成,在其最基本的,从"T"需要查询字符串值和字符串写入到一个图像,然后返回一个JPG.

它在本地完美运行,在测试服务器上 - 图像立即返回.

但是在负载均衡的实时服务器上,有时它工作正常.但往往超时/需要一分钟才能返回图像.

在我转向服务器运营商询问为什么这样做不好之前,我想我会在这里询问我的代码中是否有任何明显的问题导致问题.

下面是一个非常简化的生成器版本(它也有完全相同的超时问题)

protected void Page_Load(object sender, EventArgs e)
{

    // Set global stage dimensions
    const int stageWidth = 500;
    const int stageHeight = 200;

    // Create Bitmap placeholder for new image       
    Bitmap createdImage = new Bitmap(stageWidth, stageHeight);

    // Draw new blank image
    Graphics imageCanvas = Graphics.FromImage(createdImage);

    // Add text
    if (!string.IsNullOrEmpty(Request.QueryString["t"]))
    {
        string imageText = Uri.UnescapeDataString(Request.QueryString["t"]).Trim();
        Font font = new Font("Arial", 22);
        imageCanvas.DrawString(imageText, font, Brushes.White, 0, 0);            
    }

    // Save
    MemoryStream memStream = new MemoryStream();
    createdImage.Save(memStream, ImageFormat.Jpeg);
    imageCanvas.Dispose();
    createdImage.Dispose();

    // Set filename / image format
    Response.AppendHeader("content-disposition", "filename=MyImage");
    Response.ContentType = "image/jpeg";        

    // Send output to client
    memStream.WriteTo(Response.OutputStream);
    memStream.Dispose();
    Response.Flush();
}
Run Code Online (Sandbox Code Playgroud)

小智 3

有一些事情我会改变:

  • 使用关键字 包围流using
  • 请改用 ashx 处理程序。看起来您正在使用 aspx 文件。对于这种情况,最好使用 http 处理程序,因为它的生命周期较小。我已经多次使用它来提供图像缩略图。
  • 使用一些缓存。也许你可以利用asp.net缓存功能,你可以找出t是否有重复的值,这样你就可以将结果图像存储在缓存上,避免每次都写入和创建一些流
  • 最后但并非最不重要的一点是,尝试检查服务器是否有最新的 sp 和更新。在某些情况下,如果缺少某些更新,应用程序会表现得很奇怪,

它还可以与网络场本身相关联。您可以查看服务器的性能计数器,以查看是否报告了一些异常情况。

希望能帮助到你。