2

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

4

2 回答 2

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

于 2009-10-10T17:43:34.237 回答
1

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

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

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

于 2009-10-10T17:41:25.880 回答