Vielfach werden in ASP-Scripts HTML-Strings auf folgende Art erzeugt:
function GetTableFromDBasHTML() dim recordSet, html html = "<table>" set recordSet = LoadRecordsetFromDB() while not recordSet.EOF html = html & "<tr><td>" & recordSet("Name") & "</td><td>" & ... & "</td></tr>" recordSet.MoveNext wend html = html & "</table>" GetTableFromDBasHTML = html end function
Dabei wird intern bei jedem & ein neuer String alloziert, der die beiden Teile links und rechts von & aufnehmen kann und diese beiden Teile werden in den neuen String kopiert. Je länger der String ist und je öfter die &-Operation ausgeführt wird, desto langsamer wird das Programm. Derselbe String wird immer und immer wieder umkopiert und ein neuer String wird daran angefügt. Das geht auch effizienter:
<!--#include file="perf.inc" --> <% function GetTableFromDBasHTML() dim recordSet, htmlStream set htmlStream = NewStream(0) htmlStream.Add "<table>" set recordSet = LoadRecordsetFromDB() while not recordSet.EOF htmlStream.Add2 "<tr><td>", recordSet("Name") htmlStream.Add3 "</td><td>", ..., "</td></tr>" recordSet.MoveNext wend htmlStream.Add "</table>" GetTableFromDBasHTML = htmlStream.GetString(false) end function %>
Intern werden alle Teilstrings in einem dynamischen Array zwischengespeichert. Dazu wird die Klasse CDynArray verwendet. Erst wenn der zusammengesetzte String mit GetString abgefragt wird, werden alle Strings zusammengesetzt. Der gesamte String wird also nur ein einziges Mal umkopiert, da seine totale Länge nun bekannt ist. Es werden also nicht dauernd neue Speicherbereiche für Teilstrings erstellt und wieder verworfen.