
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Nehmen Sie bitte einen beliebigen Code aus der Standardauslieferung, erstellen Sie ein Profil davon und stützen Sie Ihre Fragen darauf. So können Sie die Situation reproduzierbar einschätzen und genaue Antworten geben.
Andernfalls ist es nicht gut, wenn kleine Teile Ihres Codes für Profiler-Berichte verantwortlich sind. Dahinter verbirgt sich eine enorme Menge an Optimierungsarbeit, die Ihren gesamten Code in eine völlig andere, durcheinandergewürfelte und eingebettete Darstellung verwandelt.
Mir ist klar, dass es ohne Reproduktion keine genauen Antworten geben wird.
Es ist unwahrscheinlich, dass Standardcodes profiliert werden, aber ich werde versuchen, reproduzierbare Teile zu geben.
Vielen Dank für Ihre Antworten!
1) Ich glaube nicht, dass ich es mit einfachem Code reproduzieren kann, ja. Und ich bin nicht bereit, das ganze Projekt zu verraten.
2) In diesem speziellen Fall stimme ich zu.
Aber es gibt viele andere Klassen, die die gleiche oder eine ähnliche Prüfung verwenden und auf TimeCurrent oder GetTickCount nicht verzichten können.
Wie kann man ihren Aufruf so optimieren, dass sie nicht mehrmals denselben Wert anfordern?
Und ist TimeCurrent wirklich so schwer, dass es sich im Hintergrund von wirklich schweren Berechnungen bemerkbar machen kann (selbst wenn sie alle 1 oder 5 Minuten durchgeführt werden)?
Oder habe ich mich wieder geirrt und 38,16% der Gesamt-CPU / 26,07% der Selbst-CPU wurden durch die Überprüfung von if selbst belegt (ohne Berücksichtigung desTimeCurrent Funktionsaufrufs)? Aber warum ist es dann so?
1) Es hilft nicht zu verstehen, warum eine so gefräßige Eröffnungsparenthese. Wie ist dies zu interpretieren?
2) Über SelfCPU ist jetzt klar, danke. Es ist ein Haufen Funktionscode ohne Rücksicht auf die aufgerufenen Funktionen.
Dies erklärt auch die niedrige SelfCPU des Strings mit iTime - sie wurde nur sehr selten erreicht, sie wurde nur selten aufgerufen.
Aber warum ist TotalCPU so hoch? Oder zeigt es die Auslastung aller iTime- (und anderer CopyXXX-?) Funktionen im gesamten Programm?
Achten Sie auf die Größe der lokalen Variablen einer Funktion, müssen Sie berücksichtigen, dass die Größe aufgrund von Inlining von aufgerufenen
erhöhen kann. Wenn Funktion verbraucht mehr als 4Kb für lokale, Service-Funktion aufgerufen wird, um Stack-Speicher zur Verfügung stellen - das ist eine harte Wahrheit Nativa und kann es nicht loswerden
TotalCPU für einen String ist nur die "Zeit" dieses Strings
Sollten es nicht immer 100 % sein? Oder sogar etwas weniger, wenn man auch @global_initializations und @global_deinitializations berücksichtigt.
Hier ist mehr als 102% ...(Build 3003 auf historischen Daten).
Für den alten Profiler hieß es in dem Artikel , dass es mehr sein könnte
Das Profiling liefert uns wichtige Statistiken: wie oft wurde jede Funktion aufgerufen, wie viel Zeit wurde für ihre Ausführung benötigt. Vielleicht verwirrt Sie die prozentuale Statistik ein wenig. Dabei ist zu beachten, dass die Statistik die Verschachtelung von Funktionen nicht berücksichtigt, so dass die Summe aller Prozentsätze viel größer als 100 % sein wird.
In dem Artikel über den alten Profiler wird darauf hingewiesen, dass es möglicherweise mehr
Achten Sie auf das Volumen der lokalen Variablen der Funktion, Sie sollten berücksichtigen, dass das Volumen durch das Inlining der aufgerufenen
Wenn die Funktion mehr als 4Kb für lokale Variablen verbraucht, wird eine Servicefunktion aufgerufen, um Stapelspeicher zur Verfügung zu stellen - dies ist eine harte Wahrheit von nativa und man wird sie nicht los
TotalCPU für eine Zeichenkette ist nur die "Zeit" dieser Zeichenkette
1) Im Funktionsrumpf wird nur eine Double-Variable deklariert (der simulierte Funktionsparameter const bool wird nicht mitgezählt).
2) Der Prozessor hat also iTime( m_symbol, PERIOD_CURRENT, 0 ) für eines der 11 Arbeitsinstrumente empfangen (es war dasjenige, für das die Bedingung "m_CloseOnFirstTickOnly || m_OpenOnFirstTickOnly" ausgelöst wurde)?
Oder meinen Sie den Modus "Funktionen nach Aufrufen" (ich habe ihn nicht gezeigt)?
Ich werde versuchen, reproduzierbare Codeschnipsel mit Ergebnissen zu machen, die ich nicht verstehe, um inhaltlich zu reden.
Bitte helfen Sie mir bei der Interpretation der Profiler-Daten anhand eines einfachen Beispiels.
Das sieht nach einem Haufen Unsinn aus.
Ich versuche wirklich, den Dreh rauszukriegen, habe aber noch kein Glück.
Habe auch Sleep Replacement ausprobiert.
Immer noch keine klaren Profiler-Werte.
Bitte helfen Sie mir bei der Interpretation der Profiler-Daten anhand eines einfachen Beispiels.
Das sieht nach einem Haufen Unsinn aus.
Derselbe Code liefert absolut korrekte Ergebnisse auf MT4.
Was mache ich im MT5 falsch?
HH Der letzte Build von MT5 mit dem Profiler von MT4 ist b2595 (b2593 - wenn er einen internen Compilerfehler erzeugt).
Ich musste ein so einfaches Beispiel schreiben, da es unmöglich war, die Profiler-Werte bei einem militanten EA mit einer beträchtlichen Größe des Quellcodes zu erklären.
Oben wurden die Fragen gestellt. Wie kann es sein, dass es auf Sleep(1) trifft, aber nicht auf Sleep(2). Ich bin mir sicher, dass Sie nichts gestartet oder angeschaut haben und Ihre Antwort einfach sofort geschrieben haben.
Derselbe Unsinn wird produziert, wenn die Optimierung deaktiviert ist. Außerdem liegt der alte Profiler bereits in b2596, wo es noch keinen neuen Ansatz gab. Ich habe die Zeit genutzt, um zu studieren...
Ich nahm an, dass der intelligente Optimierer zwei aufeinanderfolgende Schläuche zu einem kombiniert. Eine Überprüfung hat jedoch ergeben, dass dies nicht der Fall ist.
Sleep(2) ist nicht sichtbar.