Leinwand vs. Etiketten - Seite 13

 
Nikolai Semko:

Ah, dann ist es ja ganz normal.
Ich habe auch eine Leinwand auf meiner Gif, und das ist das Panel, das am wenigsten Ressourcen verbraucht, weil ich es nicht so oft neu zeichnen muss und den Moment erwische, in dem ein neuer Balken reinkommt.

Großartig! Alles fliegt!

Und bei niedriger Geschwindigkeit werden die Daten aktualisiert, ohne dass es zu Aussetzern kommt.
 
Dmitry Fedoseev:
Ich habe die richtigen Dateien gefunden. Es ist nicht klar, wo und wann man sich die Zahlen ansieht, aber auch ohne das kann man sehen, dass die Leinwand viel langsamer ist, und es ist nicht nur eine Leinwand anstelle von einem Lebble, sondern eine Leinwand anstelle von einem Haufen von Etiketten.

Führen Sie den Experten CanvasVsLabels.mq5 aus, wählen Sie den AnzeigetypoutType, aktivieren Sie limit_fps, setzen Sie nIterations, der Standardwert ist 10000. Das reicht aus, Sie brauchen es nicht zu ändern. Dann werden die Ergebnisse ähnlich sein wie die hier vorgestellten: https://www.mql5.com/ru/forum/364640/page11#comment_21301589.

Nun zu den Ergebnissen. Min delay,Mid delay undMax delay sind die minimalen, durchschnittlichen bzw. maximalen Verzögerungen für einen Durchlauf. Total, ist die Gesamtzeit für die Gesamtzahl dernIterationsdurchläufe.

Hier noch einmal eine Tabelle mit denVergleichsergebnissen

Canvas unbegrenzte fps Leinwand begrenzte fps Etiketten unbegrenzt fps Etiketten begrenzte fps
Min. Verzögerung (μs) 1530 1 18 0
Mittlere Verzögerung (μs) 7674 4086 48 7
Maximale Verzögerung (μs) 11967 11093 785 286
Gesamt (μs) 77727510 29452299 39648984 27439654


Genau die gleichen Messungen können im Prüfgerät durchgeführt werden, da der Prüfer dafür ausgelegt ist. Aber ich habe sie noch nicht gemacht. Ich werde es tun, wenn ich etwas Zeit habe. Ich plane, in Zukunft mit einer Anzeige von vielen BitmabLabels zu experimentieren.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Leinwand vs. Etiketten

fxsaber, 2021.03.13 19:26

Bin ich der Einzige mit einem solchen Ergebnis?

fxsaber:

Nimmt 15-20% weg. Offenbar ist meine Grafikkarte zu langsam.

Es stellte sich heraus, dass ResourceReadImage sehr langsam ist. Ich bin sie losgeworden - und habe null Last.

 

Ich veröffentliche noch einmal die Vergleichstabelle, aber diesmal mit Histogrammen.

Canvas unbegrenzte fps Leinwand begrenzte fps Etiketten unbegrenzt fps Etiketten begrenzte fps
Min. Verzögerung (μs) 1530 1 18 0
Mittlere Verzögerung (μs) 7674 4086 48 7
Maximale Verzögerung (μs) 11967 11093 785 286
Gesamt (μs) 77727510 29452299 39648984 27439654


Vergleich der durchschnittlichen Verzögerungswerte pro Durchgang

Mittlere Verzögerung

Die aus irgendeinem Grund nicht mit der Gesamtlaufzeit (Total) vergleichbar waren...

Vergleich der Gesamtlaufzeit

Insgesamt

Die Messungen haben gezeigt, dass die leinwandbasierte Anzeige mit begrenzten FPS (Canvas unlimited FPS) etwas langsamer ist als die kennzeichnungsbasierte Anzeige mit begrenzten FPS(Labels unlimited FPS). Im Allgemeinen eignen sich jedoch beide für die Anzeige von Informationen aus hochbelasteten Prozessen.

So führen Sie den Expert Advisor aus, um Messungen vorzunehmen

Eingabeparameter

  1. Wählen Sie outType aus der Dropdown-Liste Canvas oder Labels
  2. Limit_fps ein- oder ausschalten.
  3. Bestätigen Sie Ihre Auswahl
  4. Drücken Sie die Taste Start, um die Messungen im Diagramm zu starten.

Beginn der Messungen

Auf die gleiche Weise kann der Expert Advisor Messungen im visuellen Tester vornehmen. Der Datumsbereich sollte jedoch in den Einstellungen des Testers so festgelegt werden, dass mindestens so viele Balken in der Historie vorhanden sind wie der Wert des EingabeparametersnIterations.

Weitere Informationen sowie Quellen finden Sie in der Beschreibung der Chart Display Bibliothek:https://www.mql5.com/ru/code/33898

Speziell für Messungen angepasste Bibliothek:https://www.mql5.com/ru/code/download/33898/chartdisplay.mqh

Universalexperte für Messungen:https://www.mql5.com/ru/code/download/33898/canvasvslabels.mq5

Für weitere Einzelheiten siehe KB: https://www.mql5.com/ru/code/33898


Ich möchte weitere korrekte Messungen hinzufügen, die mit dem neuen Expert Advisor im allerersten Beitrag dieses Threads vorgenommen wurden. Denn die Messungen, die es derzeit gibt, sind nicht korrekt. Aber die erste Nachricht kann leider nicht mehr bearbeitet werden. Ich bitte die Moderatoren, mehr korrekte Messungen an den Anfang zu stellen und die jetzigen als irrelevant zu markieren.

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

Es stellte sich heraus, dass ResourceReadImage sehr langsam ist. Ich bin es losgeworden - null Last.

Ernsthaft?
Eine Überraschung für mich.
Wie viel langsamer als das Kopieren eines gewöhnlichen uint-Arrays der gleichen Größe?
 
Mihail Matkovskij:

Laufender Experte CanvasVsLabels.mq5...

Was soll das bringen? Ich möchte mich jetzt nicht mit dem Code befassen. Wie werden diese Werte berechnet? Wenn Sie mit dem Tester testen, sollten Sie die Gesamtzeit für den Lauf messen und nichts anderes, aber nicht die Leistung einzelner Codefragmente. Im Extremfall wird das Inite nicht gezählt. Und hier, ohne zu messen, kann man sehen, dass Kanvas langsamer ist. Ich weiß nicht, vielleicht habe ich eine Art Anomalie...

 
Nikolai Semko:
Wirklich?
Eine Überraschung für mich.
Wie viel langsamer als das Kopieren eines normalen uint-Arrays der gleichen Größe?

Mit Anruf waren es etwa 15 % Last, ohne - null.

 
Dmitry Fedoseev:

Was soll das bringen? Ich möchte mich jetzt nicht mit dem Code befassen. Wie werden diese Zahlen berechnet? Wenn Sie auf diese Weise im Tester testen, sollten Sie die Gesamtzeit für den Durchlauf und nichts anderes messen, und nicht die Leistung einzelner Codefragmente. Im Extremfall wird das Inite nicht gezählt. Und hier, ohne zu messen, kann man sehen, dass Kanvas langsamer ist. Ich weiß nicht, vielleicht habe ich eine Art Anomalie...

Ich möchte mich nicht mit dem Code befassen. Ich möchte mich auch nicht auf mein Wort verlassen. :) Ich weiß nicht, wie ich es Ihnen erklären soll. Ich erzähle Ihnen von Anfang bis Ende, wie ich den gesamten Code geschrieben habe... Das wäre ein ganzer Artikel. :)

Und es gibt überhaupt nichts zu verstehen, wie ein Experte Messungen vornimmt.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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();
}
Die Gesamtsumme wird am Ende der Schleife berechnet, die Werte min, mid und max im Hauptteil der Schleife, nach display.push, display.setText und display.update. Nichts Kompliziertes, wenn man sich hinsetzt und sich alles genau ansieht, kommt man zumindest an den Quellcode von Kanvas und Labels heran. Das ist übrigens auch nicht kompliziert. Mit Ausnahme der Methoden zum Zeichnen von Bezier-Kurven und ähnlichem in Kanvas.
 
Dmitry Fedoseev:

Und hier, ohne Messungen, kann man sehen, dass der Kanvas langsamer ist. Ich weiß nicht, vielleicht habe ich eine Art Anomalie...

Sie müssen mir sagen, bei welchen Eingabeparametern Kanvas langsam ist. Wenn limit_fps: false, dann ist es offensichtlich... :)

 
fxsaber:

Es stellte sich heraus, dass ResourceReadImage sehr langsam ist. Ich bin sie losgeworden und habe null Last.

Wenn Sie aus einer zur Kompilierzeit gespeicherten Ressource lesen, müssen Sie dies einmal tun.

Ressourcen werden zur Kompilierzeit komprimiert.