2011-01-14 105 views
2

我有一個項目,需要在html頁面上生成一個隨機的圖像集合。一切工作正常,直到第50圖像生成,然後我只是得到一個紅色的X.動態圖像生成後,約50圖像的紅色x的

我是否遇到一些連接限制或服務器資源限制?

下面的代碼展示了幾種不同機器上的行爲。我正在使用Visual Studio 2010和Internet Explorer。

謝謝!

HTML頁:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
</head> 
<body> 
<div id="images"> 
</div> 
</body> 

<script> 
var count = 0; 
function AppendImage() { 
    var img = document.createElement("img"); 
    img.src = "DynamicImage.aspx?id=" + count++; 
    document.getElementById("images").appendChild(img); 
    img.onreadystatechange = function() { 
    if (this.readyState == "complete") { 
    AppendImage() 
    } 
    } 
} 
AppendImage(); 
</script> 

</html> 

DynamicImage.aspx

<%@ Page Language="C#" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server"> 
protected void Page_Load(object sender, EventArgs e) 
{ 
    System.IO.FileStream fs = new System.IO.FileStream("d:\\png.png", System.IO.FileMode.Open, System.IO.FileAccess.Read); 
    IntPtr handle = fs.Handle; 
    long size = fs.Length; 
    Response.ContentType = "image/png"; 
    Response.WriteFile(handle, 0, size); 
    fs.Close(); 
} 
</script> 
+0

爲什麼不使用Response.WriteFile(字符串文件名)? – IDWMaster 2011-01-14 01:59:27

+0

使用FileStream.Handle已棄用: 請參閱http://msdn.microsoft.com/en-us/library/system.io.filestream.handle.aspx – IDWMaster 2011-01-14 02:10:16

回答

0

這裏的問題竟然是在客戶端計算機上的內存問題。該圖像的大小是當在頁面上加載〜50次時,導致Ineternet Explorer的內存達到2GB。

我通過將測試圖像更改爲更小和更大的文件來證實這是真實的,並且當內存接近2GB標記時出現相同的行爲。

2
從我可以告訴這

因此是一個遞歸函數調用,永遠不會結束。這是明智的嗎?

你有沒有試過做非遞歸函數,看看你是否有更好的運氣?使用Response.Clear

0

嘗試()首先,到Response.End和()

protected void Page_Load(object sender, EventArgs e) 
{ 
Response.Clear(); 
System.IO.FileStream fs = new System.IO.FileStream("d:\\png.png", System.IO.FileMode.Open,  System.IO.FileAccess.Read); 
IntPtr handle = fs.Handle; 
long size = fs.Length; 
Response.ContentType = "image/png"; 
Response.WriteFile(handle, 0, size); 
fs.Close(); 
Response.End(); 
}