内存效率:通过代码隐藏传递aspx页面的Html代码

时间:2009-10-10 17:21:18

标签: c# asp.net javascript streamreader

我的目标是以string的形式生成页面的aspx代码。我通过javascript中的异步请求调用下面的代码隐藏代码,我通过Response.Write获取响应

        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();

我想问的是上面的代码是内存有效的,我正在考虑使用“yield”,因为它懒惰地评估。你可以建议上面代码的内存效率。

2 个答案:

答案 0 :(得分: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,因此它返回内部字符串缓冲区作为字符串。这意味着该字符串仅创建一次,而不是来回复制。

答案 1 :(得分:1)

您的方法将html副本存储在html变量,另一个存储在memoryStream。试试这个:

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

虽然这可行,但我不确定你想要完成什么。