Profiling bedeutet das Sammeln von Programmparametern während der Ausführung. Während eines Profiling werden die Ausführungszeit und die Anzahl der Aufrufe einzelner Funktionen und Programmcode-Zeilen erfasst. Mit diesem Tool ist der Programmierer in der Lage, die langsamsten Codeabschnitte zu finden und zu optimieren.
Das Profiling kann sowohl auf dem normalen Chart der Handelsplattform als auch mit Hilfe von historischen Daten im Strategietester durchgeführt werden. Im ersten Fall wird ein Programm auf einem Chart gestartet, das in Echtzeit aktualisiert wird. Sie können so das Programmverhalten unter realen Bedingungen überprüfen. Im zweiten Fall wird das Programm im Strategietester im visuellen Modus gestartet. Der Vorteil dieser Methode ist, dass Sie nicht auf echte Daten von einem Handelsserver oder das Auftreten bestimmter Handelsbedingungen warten müssen.
Viele Programme, insbesondere Indikatoren, führen erst beim Eintreffen eines neuen Ticks Berechnungen durch (OnTick, OnCalculate). Um die Leistung zu bewerten, müssen Sie also in Echtzeit auf neue Ticks warten. Beim Profiling mit historischen Daten können Sie auch an Wochenenden, an denen Märkte geschlossen sind, sofort die erforderliche Last bereitstellen und die Programmverhalten testen.
Für das Profiling wird die Methode "Sampling" verwendet. Der Profiler pausiert den Betrieb eines MQL-Programms (~10 000 Mal pro Sekunde) und sammelt Statistiken darüber, wie oft eine Pause in einem bestimmten Codeteil aufgetreten ist. Dazu gehört auch die Analyse von Aufrufstapeln, um den "Beitrag" jeder Funktion zur gesamten Code-Ausführungszeit zu bestimmen. Am Ende des Profilings erhalten Sie Informationen darüber, wie oft die Ausführung pausiert wurde und wie oft jede der Funktionen auf dem Aufrufstapel erschien:
Sampling ist eine leichte und genaue Methode. Im Gegensatz zu anderen Methoden werden beim Sampling keine Änderungen am analysierten Code vorgenommen, die dessen Laufgeschwindigkeit beeinträchtigen könnten.
Standardmäßig wird ein Programm zum Profiling auf dem aktuell geöffneten Chart ausgeführt. Wenn das Profiling auf historischen Daten ausgeführt wird, werden die aktuellen Einstellungen des Strategietesters verwendet. Sie können MetaEditor-Optionen verwenden, um einen anderen Chart zu spezifizieren oder um einige der Tester-Einstellungen neu zu definieren.
Der gleiche Einstellungsabschnitt ermöglicht das Aktivieren oder Deaktivieren des Inlinings von Funktionen während der Kompilierung. Beim Inlining wird der Funktionscode direkt an seine Aufrufstelle angehängt, was in manchen Fällen eine deutliche Programmbeschleunigung ermöglicht. Allerdings erschwert dieses Verfahren das Profiling von Funktionen. Sie können das Inlining deaktivieren, um einen Bericht über "reine" Funktionen zu erhalten.
Diese Option deaktiviert nur das explizite Inlining. Die Funktionen, die implizit vom Compiler erzeugt werden, können weiterhin verwendet werden. Solche Funktionen werden mit dem Präfix [inlined] angezeigt.
Der Modus zur Code-Optimierung kann deaktiviert werden, um mehr Details in den Profiling-Bericht aufzunehmen. Die Codegeschwindigkeit ohne Optimierung kann um ein Vielfaches langsamer sein, aber dieser Modus bietet eine breitere Codeabdeckung. Bitte beachten Sie, dass Code-Engpässe ohne Optimierung unpräzise sein können.
Die Option zur Verwaltung der Optimierung ist auch unter den Projekteinstellungen verfügbar.
Öffnen Sie den Quellcode eines Programms (MQ4 oder MQ5). Im Menü Debug oder der Standard-Symbolleiste drücken Sie " Profiling anhand echter Daten beginnen" oder " Profiling anhand historischer Daten beginnen".
Danach wird automatisch eine spezielle Programmversion für das Profiling erstellt. Je nach gewähltem Typ für das Profiling wird das Programm auf einem normalen Chart in der Handelsplattform oder im Strategietester (im visuellen Modus) gestartet.
|
Arbeiten Sie nach dem Start einige Zeit mit der Anwendung, um alle Funktionen auszuprobieren. Dies ist notwendig, damit das Profiling die Ausführungszeit aller Funktionen und Befehlszeilen des Programms messen kann.
Dann beenden Sie das Profiling: Löschen Sie das Programm vom Chart oder klicken Sie auf Profiling beenden aus Debug des Menüs oder in der Standard-Symbolleiste.
Für genauere Ergebnisse des Profiling wird empfohlen, das Programm manuell aus dem Diagramm zu entfernen durch den Befehl Profiling beenden |
Nach Abschluss der Profilerstellung werden die Ergebnisse in der Registerkarte Profiler des Fensters Toolbox angezeigt. Zusätzlich werden die Ergebnisse direkt im Code angezeigt: Zeilen mit den entsprechenden Funktionen werden hervorgehoben. Je heller die Hervorhebung, desto länger dauerte die Ausführung der Funktion. Dieses Feature ermöglicht ein schnelles und visuelles Aufspüren von Programm-Engpässen.
Der Profiling-Bericht wird als Funktionen oder Programmzeilen dargestellt, für die jeweils zwei Indikatoren zur Verfügung stehen:
Der Wert wird als absolute Menge und als Prozentsatz der Gesamtmenge angezeigt.
Standardmäßig zeigt die Liste große Funktionen an, die sich in den oberen Levels befinden. Mit einem Doppelklick auf die Zeile können Sie zu kleineren Funktionen wechseln.
Der Profiling-Bericht kann in zwei Modi angezeigt werden: nach Aufrufen und nach Zeilen. Die zweite Methode erlaubt es, den Code mit maximaler Detailtiefe zu untersuchen und nicht nur die langsamsten Funktionen, sondern auch die langsamsten Teile solcher Funktionen zu identifizieren. Verwenden Sie das Kontextmenü, um zwischen den Modi zu wechseln.
Zur Vereinfachung werden verschiedene Elemente der MQL-Sprache als Icons im Bericht angezeigt:
Zusätzlich zu diesen Funktionen zeigt der Profiler an:
Um die Zeilennummer und den Pfad zu der Datei anzuzeigen, in der sich die Funktion befindet, bewegen Sie den Mauszeiger über die entsprechende Zeile im Bericht. Um eine Funktion in einer Datei anzuzeigen, klicken Sie doppelt darauf.
Der Profiler zeigt nicht alle Funktionen an, sondern nur die, die während des Programmablaufs aufgerufen werden. |
Die folgenden Befehle stehen im Kontextmenü zur Verfügung: