Zwei Codes, einer ist schneller, wieso?



  • @Schlangenmensch Nun ja, DevC++ ist gratis, aber brauchst es ja nicht downloaden. Leider finde ich diesen Parameter-Tab nicht : /, hätte sonst gerne an der Stelle was gesagt



  • @FP-C-Neuling sagte in Zwei Codes, einer ist schneller, wieso?:

    Das ist super cool danke, wusste garnicht das man auch ohne {} unter eine For function schreiben kann.

    Nach einem for (oder auch ìf, else, while, ... weiter nicht aufgeführte Kontrollstrukturen) kannst du eine Anweisung schreiben.
    Du kannst jedoch mehrere Anweisung mittels {} zu einem Block zusammenfassen. Der geht als eine Anweisung durch.



  • @FP-C-Neuling sagte in Zwei Codes, einer ist schneller, wieso?:

    @Schlangenmensch
    Ok das ist doch schonmal hilfreich.

    DevC++;

    Ganz wichtig ist dabei auch die benutzte Version. Vom Compiler und der IDE.



  • @Th69 Hmmmm...ok. Übrigens alles war im Relesebuild 64Bit getestet wenn es um die Zeiten ging, nie ein Debug build



  • @DirkB Alles klar ^^



  • Nächste Frage: was hast du also gemessen? Wie lange die switches dauern? Oder eher: wie lange die couts brauchen? Oder ist es, wie lange das Programm braucht, bis es geladen ist? Wenn du die gesamte Laufzeit misst, misst du alles zusammen und kannst daraus nicht auf einzelne Programmabschnitte schließen. Gerade bei solchen Mini-Differenzen. Warum willst du hier überhaupt Geschwindigkeit messen? Wäre es nicht besser, erst einmal C++ richtig zu lernen?



  • @wob Ich habe getestet bis dieses Programm gelandet ist ja, ich habe es aus dem Hauptprogramm entnommen um damit zu testen. Es ging mir darum welcher von Beiden schneller ist und warum Code 1 schneller als Code 2 ist obwohl Code 1 mehr Switchfunktionen bei gleicher Ausgabemenge und Art hat. (10 couts und 2SetColorTextAttribute) und sie sich nur in der If-Switch Logik unterscheiden



  • @FP-C-Neuling
    Welchen Code misst du, den "vereinfachten" den du hier gepostet hast oder den "echten"?
    Weil: die beiden "vereinfachten" Varianten geben schonmal nicht das selbe aus. Die erste Variante gibt viel öfter "... end" aus als die zweite.
    Es wird also mehr in die Konsole geschrieben. Daher müsste mMn. eher die erste Variante langsamer sein.

    Ich vermute aber mal dass du den "echten" Code misst, und dass im "echten" Code andere Unterschiede existieren, die dann dazu führen dass dort die erste Variante schneller ist.



  • @hustbaer hast du recht, weiß nicht warum da der Fehler unterlaufen ist, in meiner Konsole stand das gleiche bei beiden Programmen, keine Ahnung ob ichs beim Schreiben des Posts noch nicht hatte und dabei den Code geändert hatte, XD. Aber ich habs jetzt im OP überarbeitet



  • @FP-C-Neuling sagte in Zwei Codes, einer ist schneller, wieso?:

    @hustbaer hast du recht, weiß nicht warum da der Fehler unterlaufen ist, in meiner Konsole stand das gleiche bei beiden Programmen, keine Ahnung ob ichs beim Schreiben des Posts noch nicht hatte und dabei den Code geändert hatte, XD.

    Deswegen solltest du immer Code posten indem du ihn 1:1 aus deiner IDE rauskopierst. Dabei fallen dann auch so abscheulichkeiten wie das "case 1 ... 9" weg. Weil das nicht compiliert. Und das Problem dass deine SetColor Returntyp int hat aber dann gar nix zurückgibt hätte es dann wohl auch nicht gegeben.

    Aber ich habs jetzt im OP überarbeitet

    Nur nicht richtig. Case 5 hat immer noch nen Bug drinnen. Bzw. genaugenommen zwei Bugs.

    Daran liegt's aber gar nicht. Ich hab den Code mal aufbereitet und bei mir laufen lassen. Mit nem einfachen Test-Loop der das N mal in Folge ausführt und dann den schnellsten Lauf sowie die durchschnittliche Zeit rausschreibt. Ergebnis: Die sind gleich schnell, wie auch zu erwarten war. Ergebnis geht mal so mal so aus, Messtoleranz. Mit nem aufwendigeren Less-Loop für den ich jetzt zu faul war könnte man die Toleranz noch runterbringen aber blah, Wurst.

    Und: > 95% der Zeit braucht das ganze zum Malen der Buchstaben in der Konsole. Lustigerweise sieht man dabei auch dass es schneller wird wenn der "scroll-back" Bereich der Konsole voll ist. Und zwar massiv. Nicht voll = ca. 70ms, voll = ca. 12ms. Und umgeleitet auf NUL ist es ca. 0.25ms.


Log in to reply