[ TEST ] Vergleich aller CMD Varianten

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey Leute,
    da ja viele meinen DCMD sei schneller als der Vergleich mit STRCMP, und auch andersherum, habe ich mal einen Test gemacht.
    Ich habe hier im Forum noch keinen solchen Test gefunden, desshalb wollte ich euch meine Ergebnisse im Showroom zeigen.


    [table=7]
    [*].[*]DCMD[*]STRCMP[*]ZCMD[*]D-O-C*[*]OCMD[*]YCMD
    [*]Schnellster Befehl[*]3,38 ms[*]3,37 ms[*]3,82 ms[*]3,45 ms[*]3,63 ms[*]3,96 ms
    [*]Langsamster Befehl[*]5,52 ms[*]5,99 ms[*]5,03 ms[*]5,36 ms[*]5,29 ms[*]5,81 ms
    [*]Messungen insgesamt durchgeführt[*]10[*]10[*]10[*]10[*]10[*]10
    [*]Durchschnitt[*]4,62 ms[*]4,83 ms[*]4,34 ms[*]4,51 ms[*]4,62 ms[*]4,73 ms
    [/table]
    *D-O-C = Double-O-Commands


    Der knappe Gewinner ist somit ZCMD


    Damit die Messung möglichst präzise wurde, habe ich die Tests auf einem leeren Gamemode mit 1 Spieler gemacht.
    Der Server war Localhost.


    Auf Wunsch teste ich gerne auch noch andere Varianten. ;)


    Edit: ZCMD getestet
    Edit2: Fehler behoben
    Edit3: Double-O-Commands hinzugefügt
    Edit4: OCMD hinzugefügt
    Edit5: YCMD hinzugefügt
    Edit6: Tabelle korrigiert
    Edit7: Überschrift angepasst
    Edit8: Layoutfehler korrigiert

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

    9 Mal editiert, zuletzt von |-|auke ()

  • Hast du mal den Code für den Test da ?
    Ich denke, bei sowas ist dieser relevant,
    man testet sowas ja gerne mal nach ;)


    Danke für den Test,
    aber denk dran:
    Mit Geschwindigkeit wird auch Übersicht und die damit verbundene Zeitersparnis gemeint

  • Hm kaum ein Unterschied..
    Allerdings denke ich das es bei einer Menge an Usern / bei großer Serverbelastung besser ist DCMD zu nutzen.


    Davon abgesehen hat man auch mehr Möglichkeiten mit DCMD.
    Also eher es leichter mit Parametern zu arbeiten als wie mit STRCMP ^^.

  • ob ich jetzt 0,01 sec länger waren muss bis was passiert is auch egal da der "user" vll nicht so gutes inet hat und außerdem is das egal WEIL ES NUR 0,01 sec is.......... wenn es 0,5 oder sowas währe würde sich das lohnen ansonnsten eher nicht.

    Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein.


    Albert Einstein



    Ich bin nicht sicher, mit welchen Waffen der dritte Weltkrieg ausgetragen wird, aber im vierten Weltkrieg werden sie mit Stöcken und Steinen kämpfen.


    Albert Einstein

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Meinen Tests zu Folge ist meine eigene Variante die schnellste (sogar minimal schneller als ZCMD), wenn du es auch testen willst:
    #include <sscanf2>


    #define MAX_COMMAND_LEN 31
    #define MAX_PARAMS_LEN 128


    #define fcmd|%1(%2) forward fcmd_%1(%2); public fcmd_%1(%2)


    forward fcmdCommandText(playerid, cmdtext[]);


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new fcmdcommand[MAX_COMMAND_LEN], fcmdparams[MAX_PARAMS_LEN];
    cmdtext[0]=' ';
    if(sscanf(cmdtext, "s[" #MAX_COMMAND_LEN "]s[" #MAX_PARAMS_LEN "]", fcmdcommand, fcmdparams)) fcmdparams[0]=' ';
    format(fcmdcommand, MAX_COMMAND_LEN, "fcmd_%s", fcmdcommand);
    if(CallLocalFunction(fcmdcommand, "ds", playerid, fcmdparams)) return 1;
    cmdtext[0]='/';
    return CallLocalFunction("fcmdCommandText", "ds", playerid, cmdtext);
    }


    #define OnPlayerCommandText fcmdCommandText


    //E: sscanf Plugin wird benötigt, außerdem ist das nur eine Lösung wenn man sscanf so oder so zur Weiterverarbeitung nutzen möchte.

    Moderator der Bereiche: Coding, Vorstellungsrunde und Handelsecke. Über Verwarnungen, falls du zu den Wenigen gehörst, die eine Verwarnung von mir erhalten haben, kannst du jederzeit mit mir reden, sofern der Umgangston stimmt.


    expect us. / unkompetent. Das neue dynamisch. / easy-stripping.net - coming soon! / "9§. the entire website bestands out of english." / Vollprofi in allem, wo gibt und noch mehr; kann auch OOP.
    Kleine Coding-Frage? Schau doch in #dev im IRC vorbei, wir können dir sicher helfen.


    Ich bin für Aufträge im Bereich der Webentwicklung (z.B. User Control Panel) zu haben. Kontaktiere mich diesbezüglich einfach in einer privaten Nachricht mit deinen, möglichst konkreten, Vorstellungen.


    lesen.denken.posten. - [22:54:14] <Goldkiller2> früher gabs immer so coole user da stand in der signatur "lesen.denken.posten."


    Mafia 2 Multiplayer (m2mp.de) - Eine kostenlose Modifikation für Mafia 2, die es, ähnlich wie SAMP, erlaubt über das Internet oder LAN mit bis zu 1000 anderen Spielern zu spielen.

  • Zum Testen habe ich mir eine art Benchmark Plugin geschrieben.
    Ich werde mir mal überlegen, wie ich 100 echte Befehle ausführen kann.
    Allerdings sieht man bei 10 Durchläufen ja schon kleine Unterschiede ;)


    Als nächstes werde ich wohl mal zcmd und den Vorschlag von dead ausprobieren.



    @ Trooper: Mir ging es jetzt nur um die knallharten Fakten :D Was man daraus macht, kann jeder für sich selbst entscheiden ;)

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Falls das ein allgemeiner Speedtest-Thread werden soll, hier ist Y_Less Code zum Speedtesten, einfach die Defines oben austauschen oder direkt den Code unten.


    #define CODE_1 printf("%d", 42);
    #define CODE_2 new str[4]; format(str, sizeof (str), "%d", 42); print(str);
    #define ITERATIONS (10000)


    Test()
    {
    new
    t0,
    t1,
    t2,
    i;
    t0 = GetTickCount();
    for (i = 0; i < ITERATIONS; i++)
    {
    CODE_1
    }
    t1 = GetTickCount();
    for (i = 0; i < ITERATIONS; i++)
    {
    CODE_2
    }
    t2 = GetTickCount();
    printf("Time 1: %04d, time 2: %04d", t1 - t0, t2 - t1);
    }

  • Der Nachteil bei diesem ist, dass er recht ungenau sein kann.
    Es ist zwar eine gute Möglichkeit, um schnell etwas im Script zu testen, aber mit genauen Messungen ist das wohl etwas schwieriger. Mit meinem Test könnte ich sogar die Abweichung bei einem 1ms Timer messen ;)


    Eigentlich ist dieser Thread nur das, was oben steht. - Ein Vergleich von Geschwindigkeit zwischen den CMD Methoden.

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Um das noch einmal zu verdeutlichen.
    Die Zeiten an sich haben keine Bedeutungen, da sie auf anderer Hardware komplett verschieden sein werden.
    Prozentuale Werte wären in diesem Fall geeigneter, da es nur um die Realtionen geht.


    Da die Implementierung der verschiedenen Varianten sehr unschiedlich ist, kann sich das leicht auf die Präzision der Ergebnisse auswirken.
    Es wäre deshalb hilfreich, den verwendeten Gamemode hier mitzugeben.