Fragen zu MQL4 - Seite 12

 
die einzige frage ist, будет ли работать заметно быстрее, если обработку массивов вынести в DLL?
hat jemand einen compiler installiert? bitte überprüfen! ist das nicht langweilig?


Array-Zugriffe sind zehnmal langsamer als lokale Variablen.


Die Zeit für die Adressierung eines Array-Elements ist IMMER nicht länger als die Zeit für die Adressierung einer Variablen.
Die spezifischen Zahlen werden für die verschiedenen Compiler unterschiedlich sein, aber die Tendenz sollte die gleiche bleiben.

Der Compiler ist Visual Studio 2005. Der Prozessor ist ein Athlon XP 2500+.
Die Ausführungszeit beträgt zusammen mit der Array-Initialisierung 1,06-1,07 Sekunden.
Dim t1, t2 As Double t1 = DateAndTime.Timer() Dim x, y, z As Double Dim d, k As Double Dim Open(5001), Close(5001) As Double For d = 5000 To 1 Step -1 For k = 1 To 4999 z = Close(k) : y = Close(k + 1) : x = Close(k + 2) z = Open(k) : y = Open(k + 1) : x = Open(k + 2) Next Next t2 = DateAndTime.Timer() MsgBox(CStr(t2 - t1) + " Sekunden")



Die gleiche Schleife, aber mit

z = Schließen(1) : y = Schließen(1) : x = Schließen(1) z = Öffnen(1) : y = Öffnen(1) : x = Öffnen(1)


ergibt 0,37 bis 0,4 Sekunden.

Und schließlich:

z = k : y = k : x = k z = k : y = k : x = k


0,56-0,6 с.

Daher möchte ich folgende Schlussfolgerung ziehen:
hat nichts mit einem Compiler und nichts mit "Array/Nicht-Array" zu tun, sondern mit der richtigen Datenstrukturierung und korrektem Code!
P.S. Natürlich sind alle obigen Thesen, mit Ausnahme der Zeitmessungen, meine persönliche, zutiefst subjektive und bescheidene Meinung, gerade als Programmierer.

 
Danke!

ja, die Optimierung des resultierenden Codes in Compiler ist eine Macht, nachdem alle...
Ich möchte nicht in Details zu erhalten, aber es scheint, dass Visual Studio Copiler Array-Zugriffe selbst optimiert.
Um den Test fair zu gestalten, müssen Sie eine Variable eingeben, sagen wir S; und zwischen allen x,y,z-Zuweisungen etwas einfügen wie S=S+x, S=S+y, S=S+z, und dann S neben der Zeit ausgeben, um die "reine" Geschwindigkeit zu erhalten.

obwohl der Compiler-Optimierer diesen Betrug teilweise herausfinden kann... :)
 
Um die Integrität des Tests zu gewährleisten, müssen wir eine Variable einführen


Solche Gedanken habe ich schon lange verworfen. Ich habe sogar Tests gemacht. Und ich bin zu einem Schluss gekommen:

Der Compiler führt alle vorgeschriebenen Operationen aus und hat einfach kein Recht, sie nicht auszuführen, weil es einfach unmöglich ist, 100%ig zu wissen, von wo aus ich auf diese Variablen zugreifen will - in derselben Methode, von einem Zeitgeber (und strukturell nicht verwandtem Code) oder sogar von einem anderen Prozess aus.
Es ist also alles fair. Geprüft.

P.S. Offtopic, sorry. Ich konnte nicht widerstehen.
 
über Array-Zugriffe...
was ist das Array, das durch den Parameter in ArrayCopySeries angegeben wird?

ist es ein normales Array mit Werten oder ein Array mit Zeigern auf Werte?

(Das ist natürlich eine dumme Frage, aber ich habe seit 10 Jahren nicht mehr programmiert, schon gar nicht in C und schon gar nicht unter Windows.)

und wo kann man das alles nachlesen?
 
Gibt es eine Möglichkeit, den Status des EA-Triggers zwischen Ticks zu bestimmen?
Ich brauche wirklich...

Gibt es eine Möglichkeit,... Ich weiß es nicht. Ist ein rekursiver Aufruf von start() erlaubt?
 
Wird also nicht deinit() ausgelöst, wenn die Taste ausgeschaltet wird?
 
Gibt es eine Möglichkeit, den Status des EA's enable button zwischen den Ticks zu bestimmen? <br / translate="no">

Das geht nicht. Der EA wird nicht gestartet, wenn die Schaltfläche deaktiviert ist.

Ist ein rekursiver Zugriff auf start() erlaubt?

ist erlaubt.
 
Slawa,
Vielen Dank für Ihre Antwort.


Nun, äh... Und was nun...?
Ich weiß nicht... oder für 5 gehen, aber gestern... und heute für 3... die kleinen.

Ich werde mich mit vielen kleinen zufrieden geben müssen. Ich wollte das nicht. Nun, was jetzt... :(
Es scheint so einfach zu sein...

(nehmen Sie es mir nicht übel, die Meditation spritzt schon über die Tastatur)
 
FirstVisibleBar() und BarsPerWindow() sind in ME nicht farblich hervorgehoben.
Geht es nur mir so, oder soll es so sein?
 
FirstVisibleBar() und BarsPerWindow() sind in ME nicht farblich hervorgehoben. <br / translate="no"> Geht es nur mir so oder sollte es so sein?

Sie sind und waren schon immer normal hervorgehoben. Ich habe gerade den 183er Build und den 187er Build überprüft.