2009-10-10 71 views
2

我的目標是以字符串的形式生成頁面的aspx代碼。我通過javascript中的異步請求調用下面的代碼隱藏代碼,並且我得到響應通過回覆於內存效率:通過代碼隱藏傳遞aspx頁面的Html代碼

 string html = string.Empty; 
     using (var memoryStream = new MemoryStream()) 
     { 
      using (var streamWriter = new StreamWriter(memoryStream)) 
      { 
       var htmlWriter = new HtmlTextWriter(streamWriter); 
       base.Render(htmlWriter); 
       htmlWriter.Flush(); 
       memoryStream.Position = 0; 
       using (var streamReader = new StreamReader(memoryStream)) 
       { 
        html = streamReader.ReadToEnd(); 
        streamReader.Close(); 
       } 
      } 
     } 
     Response.Write(html); 
     Response.End(); 

我想問的是,上面的代碼是內存使用效率,我想「產量」的使用,因爲它計算lazily.Canü建議對以上代碼的內存efficency。

+0

我不知道我的理解是否正確;您是否想要將網頁的HTML呈現內容作爲字符串返回?我可以問爲什麼(也許有一個更簡單的方法)? – 2009-10-10 17:30:00

+0

你可以考慮我的情況,因爲有兩個頁面one.aspx和two.aspx我打電話從one.aspx通過JavaScript two.aspx頁面的代碼隱藏代碼,當這個two.aspx代碼後面的代碼被稱爲它會返回它的字符串形式的aspx代碼字符串形式爲one.aspx頁面 – Raghav 2009-10-10 17:39:24

+0

我仍然困惑這種使用場景的意圖。雖然有趣。 – 2009-10-10 18:15:40

回答

2

使用StringWriter的,而不是將MemoryStream的的StreamWriter和StreamReader的:

string html; 
using (StringWriter stream = new StringWriter()) { 
    using (HtmlTextWriter writer = new HtmlTextWriter(stream)) { 
     base.Render(writer); 
    } 
    html = stream.ToString(); 
} 
Response.Write(html); 
Response.End(); 

的StringWriter的使用StringBuilder的內部。 ToString方法在Stringuilder上調用ToString,所以它返回字符串的內部字符串緩衝區。這意味着該字符串只創建一次,而不是來回複製。

+0

此代碼配置流兩次,看看FxCop規則CA2202 – ghusse 2011-12-02 14:36:39

1

你的方法存儲一個html副本html變量,另一個在memoryStream。試試這個:

base.Render(new HtmlTextWriter(Response.Output)); 
Response.End(); 

雖然這可以工作,但我不知道你在做什麼。