Questions sur le MQL4 - page 12

 
la seule question est : будет ли работать заметно быстрее, если обработку массивов вынести в DLL?
quelqu'un a-t-il un compilateur installé ? vérifiez s'il vous plaît ! n'est-ce pas si ennuyeux ?


Les accès aux tableaux sont dix fois plus lents que les variables locales.


Le temps d'adressage d'un élément de tableau n'est TOUJOURS pas plus long que le temps d'adressage d'une variable.
Les chiffres spécifiques seront différents selon les compilateurs, mais la tendance devrait rester la même.

Le compilateur est Visual Studio 2005. Le processeur est un Athlon XP 2500+.
Le temps d'exécution avec l'initialisation du tableau est de 1,06-1,07 seconde.
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) + " seconds")



La même boucle, mais avec

z = Close(1) : y = Close(1) : x = Close(1) z = Open(1) : y = Open(1) : x = Open(1)


donne 0,37 à 0,4 seconde.

Et enfin,

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


0,56-0,6 с.

Je voudrais donc tirer la conclusion suivante :
n'est pas une question de compilateur ni de "tableau/non-réseau", mais de structuration adéquate des données et de code correct !
P.S. Bien sûr, toutes les thèses ci-dessus, à l'exception des mesures de temps, sont mon opinion personnelle, profondément subjective et modeste, juste en tant que programmeur.

 
merci !

oui, l'optimisation du code résultant dans le compilateur est une puissance après tout...
je ne veux pas entrer dans les détails, mais il semble que le copilateur de visual studio optimise les accès aux tableaux par lui-même.
pour que le test soit équitable, vous devez entrer une variable, disons S ; et insérer entre toutes les affectations x,y,z quelque chose comme S=S+x, S=S+y, S=S+z, et ensuite sortir S en plus du temps pour obtenir la vitesse "pure".

bien que l'optimiseur du compilateur puisse partiellement comprendre cette tricherie... :)
 
pour assurer l'intégrité du test, nous devons introduire une variable


J'ai depuis longtemps écarté de telles pensées. J'ai même fait des tests. Et j'en suis arrivé à une conclusion :

Le compilateur effectue toutes les opérations prescrites et n'a tout simplement pas le droit de ne pas les effectuer parce qu'il est tout simplement impossible de savoir à 100% d'où je compte accéder à ces variables - dans la même méthode, à partir d'un timer (et d'un code structurellement sans rapport) ou même à partir d'un autre processus.
Donc, tout est juste. Vérifié.

P.S. Hors sujet, désolé. Je n'ai pas pu résister.
 
à propos des accès aux tableaux...
quel est le tableau spécifié par le paramètre dans ArrayCopySeries?

s'agit-il d'un tableau normal de valeurs, ou d'un tableau de pointeurs vers des valeurs ?

(c'est évidemment une question stupide, mais je n'ai pas programmé depuis 10 ans, encore moins en C, encore moins sous Windows)

et où lire tout cela ?
 
Existe-t-il un moyen de déterminer l'état du déclencheur EA entre les ticks ?
J'ai vraiment besoin...

Y a-t-il un moyen de... Je ne sais pas. L'invocation récursive de start() est-elle autorisée ?
 
donc, deinit() n'est pas déclenché lorsque le bouton est éteint ?
 
Existe-t-il un moyen de déterminer l'état du bouton d'activation de l'EA entre les ticks ? <br / translate="no">

C'est impossible. L'EA ne démarrera pas si le bouton est désactivé.

L'accès récursif à start() est-il autorisé ?

est autorisé.
 
Slawa,
Merci de votre réponse.


Eh bien, euh... Et maintenant... ?
Je ne sais pas... ou aller pour 5, mais hier... et aujourd'hui pour 3... les petits.

Je vais devoir me contenter de beaucoup de petits. Je ne voulais pas. Eh bien, quoi maintenant... :(
Ça semble si facile...

(ne faites pas attention à moi, la méditation éclabousse déjà le clavier)
 
FirstVisibleBar() et BarsPerWindow() ne sont pas surlignés en couleur dans ME.
C'est moi, ou c'est censé l'être ?
 
FirstVisibleBar() et BarsPerWindow() ne sont pas surlignés en couleur dans ME. <br / translate="no">C'est juste moi ou ça devrait l'être ?

Ils sont et ont toujours été mis en valeur normalement. Je viens de vérifier la version 183 et la 187.
Raison: