![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
@Nikolai Semko
Nikolai, la réponse à la question"pourquoi faut-il tant de temps pour dessiner une toile" est arrivée de manière inattendue.
Les fenêtres sont composées de deux toiles ! Ces toiles sont presque de taille égale. La surface de dessin doit donc être multipliée par deux. Mais ce n'est que le début.
Sur l'espace de la fenêtre se trouvent de grands éléments de défilement (V_BOX), qui sont également dessinés entièrement remplis de la couleur d'origine. En d'autres termes, si V_BOX occupe la majeure partie de la fenêtre, la zone de dessin devrait être multipliée par trois. Mais ! il dispose d'un canevas supplémentaire. L'image défile sur ce canevas. La base de l'élément n'est qu'une barre de défilement. En bref, la zone de dessin devrait être multipliée par quatre (surtout si la barre de défilement est longue). Ce n'est qu'ensuite que les éléments sont dessinés.
Il semblerait que ce soit tout... On peut mettre un point,on multiplie la surface de la fenêtre par trois ou quatre. Mais non !
Leséléments eux-mêmes sont également multicouches. Chacun a une base. La base est toujours dessinée à partir de zéro, remplie de la couleur d'origine. Les cadres sont ensuite dessinés au-dessus de la base. Ensuite, les icônes sont dessinées sur les parties déjà dessinées de l'élément. Enfin, les textes sont dessinés par-dessus tout.
Par conséquent, l'utilisateur ne voit que la couleur finale sur chaque pixel particulier. Mais à l'endroit de ce pixel, les couleurs ont changé plusieurs fois au fur et à mesure que la fenêtre entière était dessinée.
Multipliez maintenant ce chiffre par 15 fenêtres.... Il apparaît clairement qu'il n'y a pas de bogue particulier dans le code - j'ai spécialement mesuré la vitesse d'exécution de certaines parties du bloc de dessin, et les 50 ms pour un plein écran me conviennent également. C'est juste que je me retrouve avec beaucoup plus d'écrans.
J'ai une idée pour modifier le code et accélérer le dessin de 2 ou 3 fois. Mais je le ferai après le travail principal.
Je tiens à vous remercier d'avoir insisté pour vérifier le code. Vous avez raison. C'est dans ce cas que la critique est utile.
Merci également à @AndreyBarinov pour l' astuce concernant le texte. Je pourrai peut-être trouver quelque chose.
@Nikolai Semko
...et 50ms en plein écran, ça marche aussi pour moi. ....
Le test est approximatif. J'ai mesuré la vitesse d'ouverture d'une fenêtre contenant trois toiles de taille presque égale (fenêtre d'icônes) et j'ai obtenu ~70 ms. Si l'on additionne la surface de toutes les toiles (sans les éléments), on obtient à peu près la surface de l'écran 17" de l'ordinateur portable. Cela n'inclut pas la surface de la base des éléments et des icônes elles-mêmes, qui ont été dessinées au-dessus de la toile. Donc oui, ~50ms pour remplir de couleurs la surface d'un plein écran théorique. Je ne l'ai pas encore mesuré exactement. Pourquoi, alors que l'"éléphant" se trouve au milieu de la pièce ? :)
Je parlais de 50 ms comme d'une interface surchargée et non optimisée. Une vitesse de 3 à 10 ms est normale
Vous êtes comme Stirlitz qui ne voulait pas aller au champ de patates.
Il faut une étude approfondie des cycles à l'intérieur du bloc de dessin. Un profilage superficiel ne donne pas une image complète. Mais la question est déjà claire. J'ai écrit ici #553
. Je pense que je n'ai pas tort.
(version provisoire du bloc de dessin, que j'utilise pour les tests)...
J'ai une idée pour modifier le code et accélérer le rendu de 2 ou 3 fois. Mais je le ferai après le travail principal. ...
J'ai analysé la complexité de la tâche et la valeur du résultat final.
Oui, il est très important de sortir d'abord un logiciel entièrement fonctionnel.