2009-10-10 47 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(); 

虽然这可以工作,但我不知道你在做什么。

相关问题