Discussion de l'article "Faites la Promotion de vos Projets de Développement à l'Aide des Bibliothèques EX5"
Article publié Utilisez les bibliothèques EX5 pour promouvoir vos développements:
Auteur : Alex Sergeev
Ai maladitsa, tu t'es énervé, tu t'es corrigé, un autre plug alors que nous ne sommes pas bien.
Il y a un an, je souffrais aussi de cela, j'avais beaucoup d'enthousiasme. Des obstacles ? non, je n'en ai pas vu. Mais peut-être que je suis juste d'humeur post-fêtes ... :(
Quel est le coût de l'appel aux fonctions de la bibliothèque par rapport au coût de l'appel aux fonctions de la classe native ?
Il ne s'agit pas d'un simple wrapper, il faut appeler la bibliothèque à chaque éternuement.
Tant mieux pour toi, tu t'es pissé dessus, tu t'es réparé, encore un bouchon alors que nous n'allons pas très bien.
En fait, ce n'est pas si mal ici.
C'est un bon article. J'utilise des librairies tout le temps - c'est la seule façon de séparer le code normalement jusqu'à présent.
Vous feriez mieux de me dire quand il y aura des méga-neurones universels ?
Urain:
Quel est le coût d'appel des fonctions de la bibliothèque par rapport au coût d'appel des fonctions de la classe native ?
J'ai vérifié, il n'y a pas de différence.
L'appel de la fonction Test empty lors de l'importation ou de l'inclusion n'affecte pas le temps.
/* #import "Graph.ex5" void Test(long achart,string name,int awnd,int ax,int ay,colour aclr) ; #import */ #include "Graph.mq5" void OnStart() { long a=GetTickCount(); for (int i=0; i<1000000; i++) { Test(0, "qwe", 0, 10, 10, clrRed); } Print(string(GetTickCount()-a)); }
En fait, la situation n'est pas si mauvaise que cela.
L'article va droit au but. J'utilise des librairies tout le temps - c'est le seul moyen de séparer le code correctement jusqu'à présent.
Quand y aura-t-il des méga-neurones universels ?
Quand les vôtres le seront-ils ?
Franchement, je vais lire un peu plus vos posts et abandonner complètement MT5.
J'en ai marre de toutes ces béquilles jusqu'au plus profond de mon âme, où que je me tourne tout est foireux, "et ils vont démarrer le tram" :)
Neuronka traîne quelque part, si vous avez sérieusement l'envie de vous asseoir il reste un peu de travail, mais pas d'envie.
J'ai vérifié, il n'y a pas de différence.
un tel appel du test vide lors de l'importation ou de l'inclusion n'affecte pas le temps.
Comme on dit, sentez la différence :
2012.01.06 16:46:28 Calculatrice(EURUSD,H1) empty=281
2012.01.06 16:46:28 Calculatrice (EURUSD,H1) lib=2344
//+------------------------------------------------------------------+ //|Test.mq5 | //+------------------------------------------------------------------+ #property library void Test(long achart,string name,int &awnd,int ax,int ay,color aclr) export { awnd=ax+ay; } //+------------------------------------------------------------------+
#import "Test.ex5" void Test(long achart,string name,int &awnd,int ax,int ay,color aclr); #import void OnStart() { int res=0; long a=GetTickCount(); for(int i=0; i<100000000; i++) { Test(0,"qwe",res,10,10,clrRed); } Print("liba=",string(GetTickCount()-a)); a=GetTickCount(); for(int i=0; i<100000000; i++) { res=10+10; } Print("empty=",string(GetTickCount()-a)); }
Comme on dit, sentez la différence :
Non, vous posez une question sur un appel de fonction, n'est-ce pas ?
Ou voulez-vous vérifier la vitesse d'exécution d'une boucle ?
J'ai vérifié la différence entre un simple appel de fonction ou un appel de ex5 bible. Il n'y a pas de différence dans la vitesse des appels de fonction.
Il est clair qu'une boucle vide sans appel de fonction fonctionnera plus rapidement.
Non, vous posez une question sur un appel de fonction, n'est-ce pas ?
Ou voulez-vous vérifier la vitesse d'exécution de la boucle en général ?
J'ai vérifié la différence entre un simple appel de fonction et un appel de ex5 bible. Il n'y a pas de différence dans la vitesse des appels de fonction.
Il est clair qu'une boucle vide sans appel de fonction fonctionnera plus rapidement.
Les boucles sont les mêmes, les actions exécutées à l'intérieur des boucles sont les mêmes (dans un cas directement dans la boucle dans l'autre cas à l'intérieur de la fonction) la différence de temps donne le temps net de l'appel de fonction de la lib.
Pour la pureté de l'expérience, décrivons une fonction similaire directement dans le fichier :
2012.01.06 17:18:39 Calculatrice (EURUSD,H1) empty=281
2012.01.06 17:18:38 Calculatrice (EURUSD,H1) lib=2281
//+------------------------------------------------------------------+ //|Test.mq5 | //+------------------------------------------------------------------+ #property library void Test(long achart,string name,int &awnd,int ax,int ay,color aclr) export { awnd=ax+ay; } //+------------------------------------------------------------------+
#import "Test.ex5" void Test(long achart,string name,int &awnd,int ax,int ay,color aclr); #import void Testlocal(long achart,string name,int &awnd,int ax,int ay,color aclr) { awnd=ax+ay; } void OnStart() { int res=0; int count=100000000; long a=GetTickCount(); for(int i=0; i<count; i++) { Test(0,"qwe",res,10,10,clrRed); } Print("liba=",string(GetTickCount()-a)); a=GetTickCount(); for(int i=0; i<count; i++) { Testlocal(0,"qwe",res,10,10,clrRed); } Print("empty=",string(GetTickCount()-a)); }
Pour exclure l'erreur, j'ai même réécrit la longueur de la boucle à partir d'une variable count, le résultat est le même.
J'ai 4.5 fois
2012.01.06 17:28:33 test (EURUSD,D1) ex5=2047
2012.01.06 17:28:31 test (EURUSD,D1) local=438
Alex, ce n'est pas assez pour vous ?
4 fois là, 2 fois là, etc.
Si nous commençons à écrire des bibles basées sur des bibles, les freins vont grossir comme une boule de neige.
Ce schéma peut être utilisé à condition que la bible elle-même n'utilise pas l'appel bible.
La différence de vitesse de l'exemple ci-dessus est due au fait que, dans un cas, l'optimiseur de code a complètement surligné une fonction aussi simple et a complètement exclu l'appel de la fonction elle-même, alors que dans l'autre cas, il a été forcé d'appeler honnêtement une fonction externe.
Il faut toujours tenir compte de l'influence inévitable de l'optimiseur de code dans les tests. Cet exemple de boucle dégénère en res=100 ; dans un compilateur décent dans le cas d'une fonction locale.
Essayez d'agrandir la fonction appelée pour éviter l'inlining et testez-le à nouveau.
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Un nouvel article Faites la Promotion de vos Projets de Développement à l'Aide des Bibliothèques EX5 a été publié :
Cacher les détails d'implémentation des classes/fonctions dans un fichier .ex5 vous permettra de partager vos algorithmes de savoir-faire avec d'autres développeurs, de mettre en place des projets communs et de les promouvoir sur le Web. Et tandis que l'équipe MetaQuotes ne ménage aucun effort pour amener la possibilité d'héritage direct des classes de la bibliothèque ex5, nous allons l'implémenter dès maintenant.
Nous pouvons maintenant inclure le fichier d'en-tête et importer son implémentation dans notre Expert Advisor subséquent.
Ceci peut être schématisé comme suit :
Auteur : ---