Toile et étiquettes - page 13

 
Nikolai Semko:

Ah, bien, alors c'est normal du tout.
J'ai également un seul canevas sur mon gif, et c'est le panneau qui consomme le moins de ressources, car je n'ai pas à le redessiner aussi souvent et à saisir le moment où une nouvelle barre arrive.

Super ! Tout vole !

Et à basse vitesse, il se met à jour sans hésiter.
 
Dmitry Fedoseev:
J'ai trouvé les bons fichiers. Il n'est pas évident de savoir où, quand et comment regarder les chiffres, mais même sans cela, on peut voir que la toile est beaucoup plus lente, et ce n'est pas seulement une toile au lieu d'un lebble, mais une toile au lieu d'un tas d'étiquettes.

Exécutez l'expert CanvasVsLabels.mq5, sélectionnez le type d'affichageoutType, activez limit_fps, définissez, nIterations, il est de 10000 par défaut. C'est suffisant, vous n'avez pas besoin de le modifier. Les résultats seront alors similaires à ceux présentés ici : https://www.mql5.com/ru/forum/364640/page11#comment_21301589.

Maintenant, les résultats. Min delay,Mid delay etMax delay sont les délais minimum, moyen et maximum, respectivement, pour une exécution. Total, est le temps total pour le nombre total de passes denIterations.

Une fois encore, voici un tableau avec lesrésultats des comparaisons

Canvas fps illimité Toile limitée fps Labels fps illimités Labels limités fps
Délai minimum (μs) 1530 1 18 0
Délai moyen (μs) 7674 4086 48 7
Délai maximum (μs) 11967 11093 785 286
Total (μs) 77727510 29452299 39648984 27439654


Il est possible de prendre exactement les mêmes mesures dans l'examinateur, car celui-ci est conçu pour cela. Mais je ne les ai pas encore fait. Je le ferai quand j'aurai du temps libre. Je prévois d'expérimenter un affichage de plusieurs BitmabLabels à l'avenir.

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Toile et étiquettes

fxsaber, 2021.03.13 19:26

Je suis le seul à avoir ce genre de résultat ?

fxsaber:

Il enlève 15 à 20 %. Apparemment, ma carte vidéo est trop lente.

Il s'avère que ResourceReadImage est très lent. Je m'en suis débarrassé - j'ai une charge nulle.

 

Je publie à nouveau le tableau de comparaison, mais cette fois avec des histogrammes.

Canvas fps illimité Toile limitée fps Labels fps illimités Labels limités fps
Délai minimum (μs) 1530 1 18 0
Délai moyen (μs) 7674 4086 48 7
Délai maximum (μs) 11967 11093 785 286
Total (μs) 77727510 29452299 39648984 27439654


Comparaison des valeurs de retard moyen par passage

Délai moyen

Qui, pour une raison quelconque, n'étaient pas comparables à la durée totale de fonctionnement (Total)...

Comparaison du temps de fonctionnement total

Total

Les mesures ont montré que l'affichage basé sur Canvas avec une FPS limitée (Canvas unlimited FPS) est légèrement plus lent que l'affichage basé sur Labels avec une FPS limitée(Labels unlimited FPS). Mais en général, ils sont tous deux adaptés à l'affichage d'informations provenant de processus très chargés.

Comment exécuter le conseiller expert pour prendre des mesures

Paramètres d'entrée

  1. Sélectionnez outType dans la liste déroulante Canvas ou Labels.
  2. Active ou désactive le paramètre limit_fps.
  3. Confirmez votre sélection
  4. Appuyez sur le bouton Start pour commencer les mesures dans le tableau

Mesures de départ

Le conseiller expert peut prendre des mesures dans le testeur visuel exactement de la même manière. Toutefois, la plage de dates doit être définie dans les paramètres du testeur de manière à avoir au moins autant de barres dans l'historique que la valeur du paramètre d'entréenIterations.

Vous trouverez de plus amples informations, ainsi que les sources, dans la description de la bibliothèque Chart Display: https://www.mql5.com/ru/code/33898.

Bibliothèque spécialement modifiée pour les mesures: https://www.mql5.com/ru/code/download/33898/chartdisplay.mqh

Expert universel de la mesure: https://www.mql5.com/ru/code/download/33898/canvasvslabels.mq5

Pour plus de détails, voir KB : https://www.mql5.com/ru/code/33898


Je voudrais ajouter des mesures plus correctes, réalisées avec le nouveau conseiller expert dans le tout premier message de ce fil. Car ces mesures, qui existent pour le moment, ne sont pas correctes. Mais le premier message, malheureusement, ne peut plus être modifié. Je demande aux modérateurs d'ajouter des mesures plus correctes au début, et de marquer celles qui sont là maintenant comme non pertinentes.

Дисплей с оптимизацией для вывода текста в чарт по типу консоли
Дисплей с оптимизацией для вывода текста в чарт по типу консоли
  • www.mql5.com
Данная библиотека позволяет создавать дисплеи для удобного вывода текстовой информации в чарт с наиболее оптимальной скоростью
 
fxsaber:

Il s'est avéré que ResourceReadImage est très lent. Je m'en suis débarrassé - aucune charge.

Sérieusement ?
Une surprise pour moi.
Combien plus lent que la copie d'un tableau ordinaire de uint de même taille ?
 
Mihail Matkovskij:

Expert en cours d'exécution CanvasVsLabels.mq5...

Quel est l'intérêt ? Je ne veux pas creuser dans le code maintenant. Comment ces valeurs sont-elles calculées ? Si vous testez dans le testeur, vous devez mesurer le temps total passé sur l'exécution et rien d'autre, mais pas les performances des fragments de code individuels. Dans le cas extrême, ne pas compter l'inite. Et ici, sans mesurer, vous pouvez voir que kanvas est plus lent. Je ne sais pas, peut-être que j'ai une sorte d'anomalie...

 
Nikolai Semko:
Vraiment ?
Une surprise pour moi.
Combien plus lent que la copie d'un tableau normal de uint de même taille ?

Avec l'appel, la charge était d'environ 15%, sans - zéro.

 
Dmitry Fedoseev:

Quel est l'intérêt ? Je ne veux pas creuser dans le code maintenant. Comment ces chiffres sont-ils calculés ? Si vous testez dans le testeur de cette manière, vous devez mesurer le temps total passé sur l'exécution et rien d'autre, et non les performances de fragments de code séparés. Dans le cas extrême, ne pas compter l'inite. Et voilà, sans mesures, on peut voir que Kanvas est plus lent. Je ne sais pas, peut-être que j'ai une sorte d'anomalie...

Je ne veux pas creuser dans le code. Je ne veux pas non plus me croire sur parole. :) Je ne sais pas comment vous l'expliquer. Je vous raconte du début à la fin comment j'ai écrit tout le code... Ce serait un article entier. :)

Et il n'y a rien à comprendre du tout à la façon dont un expert effectue des mesures.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void run() {
  MqlRates rates[];
  int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
  ulong start, min, mid, max;
  ulong last, delay; 
  static ulong totalDelays = 0;
  static int nTick = 0;
  ulong first;
  if (!triggerBtn.State())
    return;
  start = GetMicrosecondCount();
  min = INT_MAX; mid = 0; max = 0;
  if (CopyRates(NULL, PERIOD_CURRENT, 0, nIterations, rates) != nIterations) {
    triggerBtn.State(false);
    triggerBtn.setText("Start");
    Print("Not enough quotes!");
    Comment("Not enough quotes!");
    return;
  }
  for (int i = nIterations - 1; i >= 0 && triggerBtn.State(); i--) {
    first = GetMicrosecondCount();
    
    display.push();
    display.setText(concatenate(i));
    display.update();
    
    last = GetMicrosecondCount();
    delay = last - first;
    if (delay < min)
      min = delay;
    if (delay > max)
      max = delay;
    nTick++;
    totalDelays += delay;
    mid = totalDelays / nTick;
    Comment("Min delay: " + (string)min + " μs\n"
            "Mid delay: " + (string)mid + " μs\n"
            "Max delay: " + (string)max + " μs\n"
            "Total: " + (string)(GetMicrosecondCount() - start) + " μs" + " \n"
            "Completed: " + (string)(int)(100.0 / nIterations * (nIterations - i)) + "%");
  }
  
  printf("Min delay: %d μs", min);
  printf("Mid delay: %d μs", mid);
  printf("Max delay: %d μs", max);
  printf("Total: %d μs", GetMicrosecondCount() - start);
  triggerBtn.State(false);
  triggerBtn.setText("Start");
  ChartRedraw();
}
Le total est calculé à la fin de la boucle et les valeurs min, mid et max dans le corps de la boucle, après display.push, display.setText et display.update. Rien de compliqué, si vous vous asseyez et regardez bien tout, vous pouvez au moins accéder au code source de Kanvas et Labels. Il n'y a rien de compliqué là non plus, d'ailleurs. À l'exception des méthodes qui dessinent des courbes de Bézier et autres dans Kanvas.
 
Dmitry Fedoseev:

Et ici, sans mesures, vous pouvez voir que le kanvas est plus lent. Je ne sais pas, peut-être que j'ai une sorte d'anomalie...

Vous devez me dire à quels paramètres d'entrée Kanvas est lent. Si limit_fps : false, alors c'est évident... :)

 
fxsaber:

Il s'est avéré que ResourceReadImage est très lent. Je m'en suis débarrassé et j'ai eu zéro charge.

Si vous lisez à partir d'une ressource enregistrée au moment de la compilation, vous devez le faire une fois.

Les ressources sont compressées au moment de la compilation.