c# - 内存效率:Passing Html code of aspx page through codebehind

标签 c# asp.net javascript streamreader

我的目标是以字符串的形式生成页面的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”,因为它会延迟计算。您可以对上述代码的内存效率提出建议吗?

最佳答案

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

关于c# - 内存效率:Passing Html code of aspx page through codebehind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1548518/

相关文章:

javascript - Javascript 中的数组填充

javascript - 如何在从 canvas.todataURL 转换时提高图像的分辨率

c# - 如何为此类DataGrid组织ItemSsource

c# - 将我的 linq 查询结果集添加到数据集,c# asp.net 3.5

C# foreach 循环中的奇怪行为

c# - 如何使属性对 .NET DLL 中的 COM 可见(方法确实有效)

asp.net - Visual Studio 原生支持哪种 JavaScript 框架?

javascript - 大负载上的 WSO2ESB js 脚本调解器错误

C#如何判断一个Form的状态

C# 如何创建泛型类?