Re: Fallbeispiel1, VB6 - VB.NET

Tech-Archive recommends: Fix windows errors by optimizing your registry



Hallo Harald,
"Harald M. Genauck" <hmg.ng.entfernen@xxxxxxxxxx> schrieb

Übrigens interessant, dass

Private Function concat2() As String
Dim i As Integer, r As Integer, c As Integer
Dim tr As String, tb As String
For i = 1 To 5
Pointer = 1
BufferLen = 0
Buffer = ""
Add "<html><body><table>"
For r = 1 To 1000
Add "<tr>"
For c = 1 To 10
Add "<td>"
Add CStr(r)
Add "-"
Add CStr(c)
Add "</td>"
Next
Add "</tr>"
Next
Add "</table></body></html>"
Next
tb = LeftB$(Buffer, Pointer - 1)
End Function

wiederum minimal langsamer ist (86msec bei concat1, 91msec bei concat2) -
theoretisch müsste ja die Auflösung der Verkettung "<td>" & r & "-" & c &
"</td>" auch noch etwas bringen. Vermutlich liegt es daran, dass die
Integerwerte r und c erst explizit in Strings umgewandelt werden müssen
weil sie nicht ByRef übergeben werden können. Ändert man den Add-Parameter
in ByVal wird das ganze natürlich wieder deutlich langsamer (120msec).


Das kann ich bestätigen, so weit war ich auch schon.

Habe heute Morgen den geposteten Code neu geschrieben
weil ich die Tests von damals nicht mehr habe und mir
von Peter nicht schon wieder "Grips-Sparmaßnamen"
vorwerfen lassen wollte.

Meine allerersten Messungen nach dem Vaubekien-
Artikel haben an dieser Stelle eine concat-Klasse
verwendet von denen einige im Netz zu finden sind.
Meine damaligen Messungen waren wohl deshalb
(wie gepostet) schlechter, konnten aber noch immer
sehr gut mit dem Stringbuilder mithalten. Damals war es
auch die erste .Net Variante, oder? Mag sein dass
die Stringbuilder-Klasse inzwischen noch zugelegt hat,
sonst könnte ich Peters Messungen nicht nachvollziehen.


Lässt man jedoch die Integer einfach mal außen vor, nimmt also nur die
Verkettung "<td>" & "-" & "</td>", dann wird concat1 rasant - 34msec. Die
Auflösung der Verkettung in drei Add-Aufrufe dagegen wird zwar auch
schneller, landet aber nur bei 64msec.

Die simple &-Verkettung ist also bei kurzen Elementen trotzdem immer noch
deutlich schneller, als der Mid-Trick.

Das ist mir schon länger bekannt. Peter könnte Deinen
Versuch auch in .Net testen, sollte sich das hier auch
bestätigen, dann war der Vergleich zumindest an dieser
Stelle für etwas gut ;-)

Gruß
W. Wolf


.



Relevant Pages

  • Re: Modify a .doc document with a macro without Word ?
    ... Const LL_ITEMPTR = 4 ' Pointer to the item ... Public Sub Add(Item As Variant, Optional Key As String, Optional Before As Variant, Optional After As Variant) ... Dim lpArray As Long ' Pointer to the first element of the array ... Dim lpItem As Long ' Pointer to the item ...
    (microsoft.public.scripting.vbscript)
  • Re: Datei binär einlesen
    ... >> Sub ReadETBFile(ByVal sFilename As String) As String ... >> Dim ff As Integer, ... Rechner speichern Daten in hexadezimaler ...
    (microsoft.public.de.vb)
  • Probleme mit Rename Funktion in VB
    ... Public Function GetOrdner() As String ... Dim DataAs String ... Dim Count As Integer = 0 ...
    (microsoft.public.de.german.entwickler.dotnet.vb)
  • Datei binär einlesen
    ... Sub ReadETBFile(ByVal sFilename As String) As String ... Dim ff As Integer, bChar As Byte ... Die Rufnummer ist im Klartext in den Hexwerten vorhanden und zwar so, ...
    (microsoft.public.de.vb)
  • Re: Daten aus mehreren Registern und Dateien auslesen
    ... Private Const Orte As String = "DKNOSWFIGRES" ... Private Const Liste1 As String = "Utilization box capacity I.xls" ... Private ZielZeile As Integer ... Dim I As Integer ...
    (microsoft.public.de.excel)