ermitteln der Ausführzeit eines Scriptes



  • Hallo,

    Ich möchte gerne ermitteln, wie lange ein Datenbank Script für seine Ausführung benötigt.
    Kann mir einer sagen wie der Quellcode in C aussieht?
    Die Ausführzeit sollte wenn es geht in Millisekunden ausgegeben werden.

    Das wäre super wenn einer eine Lösung hätte.

    Danke schon mal.



  • Such mal nach GetTickCount().



  • Also in PHP habe ich es folgendermaßen hinbekommen.

    <? 
    $startzeit = microtime(); 
    
    // Script Code 
    
    $endzeit = microtime() - $startzeit; 
    
    echo 'Ausführzeit des Skriptes: '. round ($endzeit, 6) .' Sekunden'; 
    ?>
    

    Jetzt bräuchte ich "nur" noch den Code in C 😕

    Danke



  • Meinst Du sowas hier?

    unsigned int beginTime = ::GetTickCount(); 
    
    // Anweisung
    
    unsigned int endTime = ::GetTickCount(); 
    std::cout << "Time in ms: " << endTime - beginTime << std::endl;
    


  • MN schrieb:

    Meinst Du sowas hier?

    unsigned int beginTime = ::GetTickCount(); 
    
    // Anweisung
    
    unsigned int endTime = ::GetTickCount(); 
    std::cout << "Time in ms: " << endTime - beginTime << std::endl;
    

    Richtig! Sollte klappen.

    EDIT: Nur, dass du es natürlich eher mit printf() ausgibst. Wir sind ja hier im C-Forum...



  • Ja ok alles klar.

    Danke für Deine Hilfe.



  • _matze schrieb:

    EDIT: Nur, dass du es natürlich eher mit printf() ausgibst. Wir sind ja hier im C-Forum...

    und auch ohne diesen seltsamen doppelpunkt-operator
    🙂



  • GetTickCount ist wWindows-spezifisch.
    Allgemein für C nehme man clock



  • Also in C kann ich Sekunden messen:

    #include <time.h>
    #include <stdio.h>
    
    int main()
    {
        time_t Start, Ende;
        int i=0;
    
        Start = time(0);
    
        for(i=0;i<2000000000;i++); {}
    
        Ende = time(0);
    
        printf("Die benötigte Zeit in s: %.0f", difftime(Ende,Start));
        getch();
        return 0;
    }
    


  • ist zwar kein c-standard, aber kann dennoch wie folgt umgesetzt werden und einer der genausten die ich kenne:

    #include <windows.h>
    #include <time.h>
    
    LARGE_INTEGER time_start;
    LARGE_INTEGER time_stop;
    LARGE_INTEGER frequency;
    double elapsed_time = 0;
    
    QueryPerformanceCounter (&time_start);
    
    /** mach irgendwas **/
    
    QueryPerformanceCounter(&time_stop);
    
    QueryPerformanceFrequency(&frequency);
    
    elapsed_time = ( (double) (time_stop.QuadPart - time_start.QuadPart) ) / frequency.QuadPart;
    
    /** Millisec umrechnen **/
    elapsed_time *= 1000;
    

    Ausgabe z.b: 34.234 ms



  • In C kann man das mit der Funktion clock aus time.h machen:

    #include <time.h>
    int main()
    {
    	int i = 0;
    	clock_t start, stop;
    	double ms = 0.0;
    
    	start = clock();
    	while( i < 4E6 ){i++;}
    	stop = clock();
    
    	ms =  (double)(stop - start) / CLOCKS_PER_SEC * 1000;
    	printf("von 0 auf %d in  %.0f Millisekunden\n", i, ms );
    	return 0;
    }
    


  • Danke für Eure Antworten.
    Die Letzten beiden sind genau das Richtige was ich gesucht habe. Das Ergebnis sollte schon sehr genau sein.


Log in to reply