Prozedurschritt dauert länger als Haltepunktsprung

  • Allgemein

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Haudruferzappeltnoch.

    Prozedurschritt dauert länger als Haltepunktsprung

    Guten Abend,

    ich habe es mir aus Spaß mal angetan, eine eigene kleine RegEx-Klasse zu schreiben. Die arbeitet nach dem Polymorphie-Konzept. Also ich habe eine Basis-Klasse FormatObject und ihr untergliedert sind halt sämtliche konkrete Format-Objekte, wie Gruppe, Charakter-Klasse, Text usw und sofort. Die Basisklasse FormatObject definiert auch eine virtuelle Funktion, die dann letzten Endes den per Argument überlieferten Text von den Child-Objekten (Gruppe, Charakter-Klasse, Text, ...) hinsichtlich vorgegebener Formatierung analysieren lässt. Um kurz zu erläutern, wie meine Klasse ungefähr aufgebaut ist.

    Jetzt wollte ich natürlich mal mittels for-Schleife die Performance meiner RegEx-Klasse mit der aus der Standard-Bibliothek (std::regex_search) vergleichen. Dort ist mir folgendes aufgefallen: Bei einem Prozedursprung (F10 während des Debuggings) dauert es ca. 25 % länger, meine RegEx-Klasse ca. 1.000 mal den vorgegebenen Text auf Format zu überprüfen, als selbiges mit der std::regex_search-Funktion zu machen.
    Mache ich das ganze aber mit Haltepunktsprüngen (Haltepunkte jeweils hinter die jeweiligen RegEx-Funktionen setzen und dann F5 statt F10 drücken), so ist meine RegEx-Funktion etwas schneller als die aus der Standardbibliothek.

    Ich muss dazu sagen, dass meine RegEx-Klasse längst nicht vollständig ist, sondern nur ein paar Formate abdeckt. Da ist die Klasse, die hinter std::regex_search steckt, deutlich umfangreicher. Das würde erklären, warum meine beim F5-Haltepunkt-Sprung schneller ist, als die aus der Standardbibliothek.
    Aber warum ist meine langsamer, wenn ich einen Prozedursprung (F10) mache?

    Meine Vermutung ist, dass der VS-Debugger da noch etwas einschiebt. Das mag vielleicht mit der Kombination aus for-Schleife und Funktionsausführung zutun haben.

    Wenn du Performance vergleichen willst mach es lieber mit Stopwatches und in der Release Variante.
    Oder du benutzt Benchmarkdotnet.

    Generell ist Regex nie die schnellste Version um bestimmte Muster in Texten zu finden. Die Stärke von Regex liegt in der Alles-Erschlagbarkeit und möglichen Komplexität.