我最近一直在研究一個C#中的aspx動態圖像生成器,它最基本的是從「t」取一個查詢字符串值並將該字符串寫入圖像,然後返回一個JPG。C#圖像生成器 - 性能低下
它在本地完美運行,並在測試服務器上 - 圖像立即返回。
但是當在負載平衡的在線服務器上時,它有時可以正常工作。 但是,經常超時/花費一分鐘才能返回圖像。
我想我會問在這裏,如果在我的代碼中有任何明顯的問題會引起問題,那麼我會轉向服務器運營商,詢問爲什麼這種方式運行不正常。
下面是發電機的非常精簡的版本(其中也有完全相同的超時問題)
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();
}
是否超時在服務器上*由於負載過重*?服務器負載是否輕?你有沒有在你的本地服務器上強調這個測試? –
另外,在'using'塊中包裝實現'IDisposable'的任何東西。如果在調用'.Dispose()'之前因任何原因拋出異常,您將泄漏資源......尤其是在負載下這會很糟糕。 –
它沒有解釋超時,但我會使用一個普通的HttpHandler來代替使用Page實例,除非你做了一些不尋常的事情,否則你可能不需要UnescapeDataString調用。 – bmm6o