Performance -Problem beim wstring



  • Kann mir ehrlich gesagt nicht vorstellen, dass es lange dauert einen Text anzufügen.
    Wie kommst Du darauf, das es daran liegt?



  • ich habe den String schon als Referenz übergeben , nur im Beispiel nicht angegegeben.

    Das mit sBlob +=sText muss ich noch testen.

    Danke !

    Mfg , Elke



  • Hallo templäd ,

    ich habe unsere lauffähige Anwendung vor Kurzem auf den wstring umgestellt.

    Und wenn ich die Zeiten vergleiche , dann ist das Programm richtig langsam geworden. Es kann nur am wstring liegen. In der "nicht umgestellten" Anwendung haben wir den String allerdings als char zusammengebaut.

    Mfg , Elke



  • Naja, du solltest auch bedenken, dass bei einem wstring mehr Daten gelesen und geschrieben werden müssen, da wchar_t idR mehr Speicher verbraucht als char. Unter Windows ist char zB 8 Bit und wchar_t 16 Bit. Solange deine Anwendung bei so einer Konstellation also nicht mehr als doppelt so langsam (was der Worst-Case wäre) läuft wie vorher, würde ich mir noch keine Sorgen machen.



  • Hallo groovemaster,

    das ist ja das Problem . Die Anwendung ist ums Zehnfache langsamer 😞

    Mfg, Elke



  • Hmmm ... dann würde ich empfehlen, einen Profiler zu benutzen, falls das möglich ist. Evtl. lässt sich damit herausfinden, wo zuviel Zeit gebraucht wird.



  • Hallo CStoll,

    vielen Dank für deinen Tipp:
    Das mit

    sBlob += sText
    

    statt

    sBlob = sBlob + sText
    

    Es hat wahre Wunder bewirkt ! Die Laufzeit hat sich von einer Stunde auf 3 Min.
    verkürzt !

    Wird bei der zweiten Schreibweise immer eine neue Instanz erzeugt und der Inhalt reinkopiert ?

    Danke !

    Viele Grüße,
    Elke



  • Nunja, zweitere Variante muss auf jeden Fall
    a) Neuen, temporären String erzeugen, Speicher allokieren
    b) In diesen neuen String die beiden Teilstrings kopieren
    c) temporären String in Ergebnis kopieren

    Erstere ist in der Lage den Faktor der Reserve auszunutzen
    a) Schauen ob Kapazität kleiner als neue Länge
    a2) Nur wenn ja, neuen Speicher allokieren
    b) Teilstring an bisherigen String anhängen

    Es wird also in c) die Kopie gespart und in a) evtl. vorhandener Reservespeicher ausgenutzt.

    EDIT:
    Dreher korrigiert 🙄



  • Was ist mit der append()-Methode?


  • Mod

    Artchi schrieb:

    Was ist mit der append()-Methode?

    äquivalent zu +=


Anmelden zum Antworten