std::stringstream vs. trickreiche std::string Operationen



  • Hallo bin neu hier,

    Kurze Frage: Sind std::stringstreams kostenaufwändig und besser zu vermeiden wenn (vermutlich trickreichere) std::string Operationen auch möglich sind?

    Es geht um eine urlencode() Methode.

    Bin noch am tüfteln, wie ich das mit reinen Strings mache, da die unterliegende Datenstruktur auch std::string ist und daher noch nicht dazu gekommen bin beide Variationen zu vergleichen.

    Oder kann ich den Gedanken ignorieren und der Einfachheit halber immer auch stringstreams zugreifen?

    Danke im Voraus für ein paar nette Antworten... 🙂


  • Mod

    Wird oft langsamer sein, als string-Tricksereien. Aber: Wieviele URLs willst du encoden, dass du denkst, dass der Unterschied zwischen 200 Mikrosekunden und 400 Mikrosekunden eine Rolle spielt?



  • @SeppJ,

    Ich habe aktuell keine Perfomance Probleme. War nur auf der Suche nach Perfektion. Die Antwort dazu hast du jetzt gegeben. Aber ich glaube ich lasse es so, wie es ist, weil ich bin auch ein Fan der Einfachheit.

    Nach Austausch mit weiteren Programmieren habe ich begriffen, dass stringstreams on the fly keine gute Idee ist, sondern sie nur einmalig instanziieren und sie dann mit std::stringstream::str() und std::stringstream::clear() neu zu befüllen.

    Oder noch eine weitere Idee, wo ich an premature optimization zweifle:

    thread_local static std::stringstream ss;
    

    Es handelt sich um encode() und decode() Methoden einer http path Klasse.


  • Mod

    Du meinst, ob das static was nützt? Nein, mit static erreicht man eher dasGegenteil. static macht es dem Compiler schwerer, Optimierungen durchzuführen, weil nun der Zustand des Objekts nach außen hin beobachtbar ist. Das legt dem Optimierer unnötige Nebenbedingungen an, die ihm die Arbeit erschweren.



  • @SeppJ,

    Hm, ok. Bin da nicht so tief in der Materie was Compiler Optimierungen angeht.

    Aber ich belasse es so wie es ist, vermeide stringstreams on the fly und wenn ich dann wirklich einmal Performance Büßen kassiere, dann will ich mir weiter Gedanken machen.

    Danke!

    Edit: Ich würde ja gerne meine gesamte HTTP Pfad Klasse posten, damit sich andere daran zerreißen können, aber ich weiß nicht ob das sinnvoll wäre, wenn darauf keiner antworten würde...


Anmelden zum Antworten