2011-01-14 50 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(); 
}