【问题标题】:Memory efficiency :Passing Html code of aspx page through codebehind内存效率:通过codebehind传递aspx页面的Html代码
【发布时间】:2009-10-10 17:21:18
【问题描述】:

我的目标是以字符串的形式生成页面的 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”,因为它是懒惰地评估。你能建议上面代码的内存效率吗?

【问题讨论】:

  • 我不确定我理解正确;是否要将页面的 HTML 呈现内容作为字符串返回?请问为什么(也许有更简单的方法)?
  • 你可以把我的情况想成有两个页面 one.aspx 和 two.aspx 我通过 javascript 从 one.aspx 调用 two.aspx 页面的代码隐藏代码,当这个 two.aspx 代码调用后面的代码会以字符串的形式将其aspx代码以字符串的形式返回到one.aspx页面
  • 我仍然对这种使用场景的意图感到困惑。不过很有趣。
  • @okw 我的情况是我必须在一个 div 中的 one.aspx 上的 two.aspx 中生成 html 代码,你可以说,我异步调用 two.aspx.cs 并发送 html two.aspx.cs 的代码两个 one.aspx 并在 div 标签中附加 html。

标签: c# asp.net javascript streamreader


【解决方案1】:

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

【讨论】:

  • 这段代码处理了两次流,看看 FxCop 规则 CA2202
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    相关资源
    最近更新 更多