代码之家  ›  专栏  ›  技术社区  ›  Raghav

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

  •  2
  • Raghav  · 技术社区  · 17 年前

    我的目标是以字符串的形式生成页面的aspx代码。我通过javascript中的异步请求调用下面的codebehind代码,并通过response返回响应

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

    我想问的是,上面的代码是内存有效的,我在考虑使用“收益率”,因为它的评估是懒惰的。你能就上面代码的内存效率提出建议吗。

    2 回复  |  直到 17 年前
        1
  •  2
  •   Guffa    17 年前

    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,因此它返回内部字符串缓冲区作为字符串。这意味着字符串只创建一次,而不是来回复制。

        2
  •  1
  •   Rubens Farias    17 年前

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

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

    虽然这是可行的,但我不确定你想要实现什么。