Fehler, Irrtümer, Fragen - Seite 2749

 
Roman:

Auf der vorhergehenden Seite hat fxsaber Messungen vorgenommen.
Ich habe erklärt, warum dies der Fall ist.
Weisen Sie immer Speicher zu, statisch oder dynamisch.

Wenn Sie eine große Tabelle meinen, dann ist nur der linke Teil auf dem Bildschirm zu sehen, der Rest ist abgeschnitten, so dass ich nicht weiß, was dort zu sehen ist.

Aber dem Code nach zu urteilen, wenn dieses Makro verglichen wird

GetCurrentTick2(Tick, !i)

Ich habe nur einen Funktionsaufruf pro 100 Iterationen. Und das erste Makro hat bei jeder Iteration einen Aufruf. Es macht also keinen Sinn.

 
Alexey Navoykov:

Wenn Sie die große Tabelle meinen, ist nur der linke Teil auf dem Bildschirm zu sehen, der Rest ist abgeschnitten, so dass ich nicht weiß, was dort ist.

Aber dem Code nach zu urteilen, wenn dieses Makro verglichen wird

Und im ersten Makro gibt es nur einen Funktionsaufruf pro 100 Iterationen, das ist also Unsinn.

Der Compiler ist nicht allmächtig, manchmal muss man selbst Hand anlegen und ihm mit dem richtigen Code helfen ))

 
Sergey Dzyublik:
Fehler im ME-Debugger (Build 2370) - StepInto (F11) und manuell gesetzte Breakpoints funktionieren nicht.
Das Problem ist, dass, wenn die Aktion StepOver (F10) mindestens einmal auf einen Funktionsaufruf angewendet wird, es keine Möglichkeit gibt, diese Funktion später zu debuggen.

Wiederholungsschritte:
1) Code im Debug-Modus ausführen;
2) Nachdem ein Haltepunkt ausgelöst wurde, StepOver (F10) zweimal ausführen;

Alles - jetzt gibt es keine Möglichkeit mehr, in dieIncrement-Funktion zu gelangen, alle manuell gesetzten Haltepunkte werden nicht ausgelöst, und anstelle der StepInto-Operation (F11) wird tatsächlich StepOver (F10) ausgeführt.


Vielen Dank für diesen Beitrag.

Korrigiert von

 
Roman:

Der Compiler ist nicht allmächtig, manchmal muss man sich einmischen ))

Was meinen Sie? Sie haben mir versichert, dass Ihr Konstrukt schneller ist, aber das ist es nicht. Es ist nur 100 Mal unwahrscheinlicher, dass es in diesem Code aufgerufen wird.
 
Alexey Navoykov:

Im ersten Makro gibt es nur einen Funktionsaufruf pro 100 Iterationen, das ist also Unsinn.

Der Test, wenn man nicht auf die Genauigkeit achten will, die wir hier nicht brauchen, ist plus oder minus normal.
Im Vergleich zu: 100-maliger Aufruf von SymbolInfoTick VS 1-maliger Aufruf von SymbolInfoTick und Rückgabe von 99-maligem "manuellen" Cache.
Zeigt, dass es unrentabel ist, die Standardfunktion SymbolInfoTick für das aktuelle Symbol zu verwenden, wenn die Funktion mehr als einmal in einem einzigen Durchgang aufgerufen wird.
Als mögliche Lösung für das Problem schlagen die Entwickler die Einführung einer vordefinierten Variable vor:

const MqlTick _Tick; // Текущий _Symbol-тик.



Es ist nur so, dassfxsaber alles über die Beiträge verstreut hat, ohne irgendetwas zu erklären, das ist schon ein starkes Stück.

 
Alexey Navoykov:

Im ersten Makro gibt es nur einen Funktionsaufruf pro 100 Iterationen, das ist also Unsinn.

Sein Beispiel ist eine spezifische Verwendung von Bid/Ask-Daten in verschiedenen Teilen des MQL-Programms, je häufiger Sie auf SymbolInfoTick() zugreifen, desto geringer ist die Testleistung

Ich habe einige Performance-Probleme mit TimeCurrent() gefunden, ich habe es auf verschiedene Arten versucht, dann verworfen es,

Ich verwende nur selten die Sichtbarkeit globaler Variablen, aber damit im Tester alles "fliegt", schreibe ich es auf diese Weise:

MqlTick Tick = {0};
#define  Ask Tick.ask
#define  Bid Tick.bid
#define  TimeCurrent_ Tick.time
//+------------------------------------------------------------------+
void OnTick()
{
   SymbolInfoTick(_Symbol,Tick);
  ....
}
 
Alexey Navoykov:
Sie haben mir versichert, dass Ihr Entwurf schneller ist, aber er ist nicht schneller, sondern es ist nur 100 Mal unwahrscheinlicher, dass er in diesem Code aufgerufen wird.

Dies ist nicht mein Entwurf, und so wie ich das Beispiel verstanden habe, wurden die Makros für den Test nacheinander aufgerufen.
Und der Durchlaufbericht wird zusammen angezeigt, auch wenn er beschnitten ist, können Sie die Ausführungszeit sehen.

 
Sergey Dzyublik:

Wenn Sie sich nicht um die Genauigkeit kümmern, die Sie nicht brauchen, ist der Test plus oder minus normal.
Im Vergleich zum 100-maligen Aufruf von SymbolInfoTick und dem einmaligen Aufruf von SymbolInfoTick und der 99-maligen Rückgabe des "manuellen" Cache.

Ja, ich verstehe das mit dem Cache. Es ist nur so, dass Roman hier etwas über die Speicherzuweisung gerieben hat... Sieht so aus, als hättest du Recht mit dem Troll gehabt)

 
Alexey Navoykov:

Ich weiß von dem Cache. Es ist nur so, dass Roman hier etwas über die Speicherzuweisung gerieben hat... Sieht so aus, als hättest du Recht mit dem Troll)

Wo ist der Cache Ihrer Meinung nach untergebracht? Ihr Schwachköpfe.

 
Sergey Dzyublik:

Der Test ist, wenn man sich nicht um die Genauigkeit kümmert, die man nicht braucht, plus oder minus normal.
Vergleich: 100-maliger Aufruf von SymbolInfoTick vs. 1-maliger Aufruf von SymbolInfoTick und Rückgabe von 99-maligem "manuellen" Cache.
Zeigt, dass es unrentabel ist, die Standardfunktion SymbolInfoTick für das aktuelle Symbol zu verwenden, wenn die Funktion mehr als einmal in einem einzigen Durchgang aufgerufen wird.
Als mögliche Lösung des Problems wird den Entwicklern empfohlen, eine vordefinierte Variable einzuführen:

Sie verstehen mich zu 100 %.

Der Grund ist, dassfxsaber alles in seinen Beiträgen verbreitet hat, ohne es zu erklären, und das ist schwer zu verstehen.

Es tut mir leid, ich habe es nicht gut formuliert.

Grund der Beschwerde: