Frage

Mein Ziel ist es, den aspx-Code einer Seite in Form von string.I nennt die folgenden Code-Behind-Code durch asynchrone Anforderung in Javascript zu erzeugen und ich erhalte die Antwort zurück durch 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();

Ich möchte darum bitten, dass der obige Code ist Speicher effizient ist, ich denke an „Ausbeute“ zu verwenden, da es lazily.Can auswertet u auf Speicher efficency von oben Code vor.

War es hilfreich?

Lösung

Verwenden Sie einen String anstelle des Memorystream, der Stream und der Stream:

string html;
using (StringWriter stream = new StringWriter()) {
   using (HtmlTextWriter writer = new HtmlTextWriter(stream)) {
      base.Render(writer);
   }
   html = stream.ToString();
}
Response.Write(html);
Response.End();

Das String verwendet einen String intern. Die toString Methode ruft ToString auf der Stringuilder, so dass er den internen Zeichenfolgenpuffer als Zeichenkette zurückgibt. Das bedeutet, dass die Zeichenfolge nur einmal erstellt werden, und nicht hin und her kopiert werden.

Andere Tipps

Ihre Methode speichert eine HTML-Kopie auf html Variable und eine weitere bei memoryStream. Versuchen Sie folgendes:

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

Während diese Arbeit, ich bin nicht sicher, was Sie erreichen wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top