Speichereffizienz: Übergeben von HTML-Code aspx Seite durch Code-Behind
-
20-09-2019 - |
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.
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.