Kleine Tools: Einfache Messung des Skripttimings

Veröffentliche deine funktionierenden Skripte und Funktionen

Moderator: jNizM

halweg
Posts: 93
Joined: 17 Apr 2018, 10:34
Location: Dresden

Kleine Tools: Einfache Messung des Skripttimings

Post by halweg » 19 Mar 2020, 07:00

Danke den zahlreichen Helfern hier. Ich denke, es ist fair, wenn ich ab und zu auch meine Lösungen poste.

Hier eine Variante, wie man bei zeitkritischen Skripts das Timing genauer unter die Lupe nehmen kann und so Schwachstellen schnell und leicht findet. Für mich ist das sehr wichtig, denn ich starte praktisch ständig Befehle und Tasteninteraktionen und erwarte dabei sehr präzise und kurze Antwortzeiten meiner Skripte. Dazu muss ich alle potentiell kritischen Operationen erkennen können.
Über die Variable "zeit_nehmen" lässt sich die Zeitmessung zentral ausschalten, ohne die zahlreichen Aufrufe entfernen zu müssen.

Hier der Code, in dem ist alles erläutert:

Code: Select all

/*******************  Scripttiming messen **********************************************************************
Mit Hilfe der beiden Module, die einfach in ein bestehendes Skript integriert werden können, 
kann das Skripttiming übersichtlich gemessen werden.
Zur Nutzung erfolgt an den zeitkritischen Stellen ein Aufruf:
                  zeit_nehmen("Beschreibung")
Erfolgt 2 s lang kein entsprechender Aufruf, wird eine Messagebox mit den Timingdaten angezeigt.
Der große Vorteil ist, dass das Skript beim Zeitmessen keine zeitlich relevanten Unterbrechungen verursacht.
Allzeit gutes Timing!
Halweg
*/  

; Testaufruf
#q::  
zeit_nehmen("Hotkey win-q wurde erkannt.")  
  SLEEP, 100       
zeit_nehmen("Oparation wurde beendet.")  
  SLEEP, 500  
zeit_nehmen("andere Operation wurde beendet.") 
RETURN 

zeit_nehmen(text="")
  {
  GLOBAL
  ; Allgemeine Einstellungen
  zeiten_nehmen=1                          ; schaltet die Zeitmessung ein und aus
  zeitmessung__ergebnisverzoegerung=2000   ; Wieviel ms nach der lezten Messung soll das Ergebnis der Zeitmessung angezeigt werden.
  
  IF Zeiten_nehmen   ; Aktivierung nur, wenn diese globale Variable gesetzt ist
    {
    messpunkt+=1
    messzeit%messpunkt%:=A_TICKCOUNT
    messzeittext%messpunkt%:=text
    SETTIMER, zeitmessung_anzeige,-%zeitmessung__ergebnisverzoegerung%
    }
  }

; Dieses Modul wird zeitgesteuert aufgerufen, wenn nach einer Zeitnahme eine Zeitlang nichts passiert 
zeitmessung_anzeige:
  IF messpunkt    
    {                                      
    ; Zusammenstellen der anzuzeigenden Übersicht                                      
    zeittext=Ergebnis Zeitmessung`n                                  
    startzeit:=messzeit1                              
    LOOP, %messpunkt%                          
      {                      
      vorher:=A_INDEX-1                  
      IF vorher>0              
        zeitzeile:=messzeit%A_INDEX% - startzeit . "(+" . messzeit%A_INDEX% - messzeit%vorher% . " ms): " . messzeittext%A_INDEX%          
      ELSE      
        zeitzeile:=messzeit%A_INDEX% - startzeit . ": " . messzeittext%A_INDEX%  
      zeittext.=zeitzeile . "`n"
      }
    ; Ausgabe der Messagebox
    MSGBOX, %zeittext%
    messpunkt=0
    }
RETURN
Hier ein Beispiel einer Ausgabe:
TIMING_Ausgabe.jpg
TIMING_Ausgabe.jpg (39 KiB) Viewed 2475 times

Return to “Skripte und Funktionen”