WaBis

walter.bislins.ch

CStream: Anwendung

CStream : Download | Anwendung | Funktionen
An einem Beispiel wird gezeigt, wie mit der CStream-Klasse das Zusammensetzen von langen Strings verglichen mit den VbScript Funktionen viel schneller und effizienter wird.

Ineffizientes klassisches Beispiel mit dem Operator &

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:

Effizienteres Beispiel mit CStream

<!--#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
%>

Funktionsweise CStream

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.

Weitere Infos zur Seite
Erzeugt Sonntag, 27. Juli 2008
von wabis
Zum Seitenanfang
Geändert Samstag, 18. Juli 2015
von wabis