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.
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.