Gần đây tôi đã làm việc trên máy phát hình ảnh động aspx trong C#, cơ bản nhất, lấy giá trị chuỗi truy vấn từ "t" và ghi chuỗi đó vào hình ảnh, sau đó trả về JPG.Máy phát hình ảnh C# - Hiệu suất chậm
Nó hoạt động hoàn hảo tại địa phương và trên máy chủ thử nghiệm - hình ảnh được trả về ngay lập tức.
Nhưng khi trên máy chủ trực tiếp cân bằng tải, đôi khi nó hoạt động tốt. Nhưng thường xuyên hơn thời gian chờ/mất đến một phút để trả lại hình ảnh.
Tôi nghĩ tôi sẽ hỏi ở đây nếu có bất kỳ điều gì rõ ràng trong mã của tôi có thể gây ra sự cố, trước khi tôi chuyển sang các nhà khai thác máy chủ để hỏi tại sao điều này không hoạt động tốt.
Dưới đây là một phiên bản rất tinh gọn của máy phát điện (mà cũng có những vấn đề chính xác cùng một thời gian chờ)
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();
}
Đã hết thời gian trên máy chủ * vì tải nặng *? Là máy chủ tải ánh sáng? Bạn đã thử nghiệm điều này trên máy chủ cục bộ của bạn? –
Ngoài ra, hãy bọc mọi thứ thực hiện 'IDisposable' trong khối' using'. Nếu một ngoại lệ được ném ra vì bất kỳ lý do gì trước khi bạn gọi '.Dispose()', bạn sẽ bị rò rỉ tài nguyên ... mà sẽ là xấu theo tải đặc biệt. –
Nó không giải thích thời gian chờ, nhưng tôi sẽ sử dụng một HttpHandler đơn giản cho việc này thay vì sử dụng một thể hiện Trang, và trừ khi bạn đang làm một cái gì đó bất thường bạn có thể không cần cuộc gọi UnescapeDataString. – bmm6o