2011-01-14 7 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(string filename)を使用しないのはなぜですか? – IDWMaster

+0

FileStream.Handleの使用は推奨されていません。 http://msdn.microsoft.com/en-us/library/system.io.filestream.handle.aspx – IDWMaster

答えて

0

問題を最初に)(Response.Clearを使用してみてください、とResponse.Endの()は、クライアントマシン上のメモリの問題であることが判明しました。イメージは、1ページに50回ロードされたときに、Ineternet Explorerのメモリが2GBに収まるサイズでした。

テストイメージを小さくして大きなファイルに変更すると、これが正しいと確認され、メモリが2GBのマークに近づいたときに同じ動作が表示されます。

2

ので、私はこれは決して終わらない再帰関数呼び出しで伝えることができるものから。それは賢明ですか?

あなたは非再帰的な関数を作ってみたことがありますか?ここ

+0

を参照してください。再帰的であるという事実ではありません。問題。私はちょうどその動作を示すために使用しています。 – Nformer

0

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(); 
} 
関連する問題