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

上記のコードはメモリ効率が高いかどうかを尋ねたいのですが、遅延評価するときに使用する「利回り」を考えています。上記のコードのメモリ効率について提案できますか。

4

2 に答える 2

2

MemoryStream、StreamWriter、StreamReader の代わりに StringWriter を使用します。

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 に答える