Leinwand vs. Etiketten

 

Ich möchte Ihnen einen Vergleich der Geschwindigkeit von Displays für die Anzeige von Text im Diagramm vorstellen, die mit verschiedenen Methoden erstellt wurden. Die erste Variante der Anzeige habe ich mit der CCanvas-Klasse erstellt, die zweite mit Labels (CChartObjectLabel). Alle Klassen wurden der Standardbibliothek entnommen. Diese Idee kam mir, als ich eine Anzeige auf CCanvas erstellte und mein Expert Advisor dadurch erheblich verlangsamt wurde. Zur gleichen Zeit, einige Programmierer behauptet, dass ich falsch war undCCanvas, und um genauer zu sein, OBJ_BITMAP_LABEL ist sehr schnell, schneller als alle Methoden der Anzeige von Informationen in der Tabelle in MetaTrader.Also beschloss ich, dies experimentell zu überprüfen. Der Moment der Wahrheit also.

Bedienung der Anzeige mit Ausgabe imCCanvas

CCanvas

CPU-Auslastung in diesem Moment

CPU

Bedienung der Anzeige mitCChartObjectLabel-Ausgabe

Etiketten

Betrieb vonCChartObjectLabel mit CChartObjectLabel mit aktiviertem Geschwindigkeitsoptimierungsmodus (ich werde weiter unten darüber berichten).

Optimierte Etiketten

Nun zu den Zeitwerten. Total ist die Gesamtlaufzeit des Testexpertenberaters. Min delay,Mid delay undMax delay sindVerzögerungszeiten in Ticks. Aber sie können nicht immer korrekt erhalten werden, obwohl ich den Code überprüft habe und es keine Fehler gab. Ich denke, es hat mit der Funktion GetTickCount64 im Tester zu tun. Aber das ist ein unbedeutendes Problem. Die Hauptsache ist, dass die Gesamtzeit angezeigt wird.

Lassen Sie mich nun kurz auf die Optimierung der Anzeige auf Etiketten eingehen. Damit der Text auf dem Bildschirm erscheint, müssen Sie Zeilen aus einer speziellen Reihe von Zeilen in Etiketten anzeigen, die von oben nach unten in der Anzahl von 50 Stück angeordnet sind. Wenn jedoch nur die letzte Zeile aktualisiert wird, ist es nicht notwendig, alle Etiketten zu aktualisieren, sondern es reicht aus, nur ein Etikett zu aktualisieren, das dieser Zeile entspricht. Schalten Sie den OptimizeUpdate-Modus ein, und Sie erhalten einen Leistungsgewinn von mehr als dem Doppelten.

Ich habe beschlossen, die Anzeige auf Etiketten genauer zu testen, da dieser Testzeitraum aufgrund der Geschwindigkeit zu kurz ist. Deshalb habe ich den Testzeitraum verlängert. Und erhielt die folgenden Ergebnisse.

OhneoptimizeUpdate: false

optimizeUpdate: false

MitoptimizeUpdate: true

optimizeUpdate: true

Ich habe alle Ergebnisse zu Excel hinzugefügt

Vergleich der Ergebnisse

Das erste Histogramm zeigt den Gesamtvergleich, das zweite Histogramm zeigt nur die Variante mit Etiketten.

Fazit: Die auf CChartObjectLabel erstellte Anzeige kann 83,7 Mal schneller sein als die entsprechende Anzeige auf CCanvas. Nicht umsonst gelten Pixeloperationen als die kostspieligsten in allen Programmen!

Ich füge eine Tabelle mit den Testergebnissen bei. DerQuellcode kann von KB heruntergeladen werden:https://www.mql5.com/ru/code/33898


Dateien:
 

Ich verstehe nicht, warum der Vergleich im Visualiser und nicht im Terminal durchgeführt wurde?

Ich habe mir den Code nicht angesehen. Für solche Aufgaben ist Kanvas eine für alle "50 Linien".


Im Terminal habe ich über die Usage-Bibble gemessen. Die Methoden weisen keine signifikanten Unterschiede auf.

 
fxsaber:

Ich verstehe nicht, warum der Vergleich im Visualiser und nicht im Terminal durchgeführt wurde?

Denn im Visualiser ist es die langsame Geschwindigkeit von Canvas, die die Probleme verursacht. Und Sie können sehen, was sie sind. Eine solche Anzeige frisst mehr als 50 % der CPU-Zeit, ich habe es oben erwähnt! Und in Terminal müssten Sie die Methoden in einer Schleife aufrufen, um alles zu sehen. Aber ich habe mich nicht darum gekümmert. Ich habe einen Expert Advisor in der Schleife mit Offline-Optimierung laufen, wo ich eigentlich eine solche Anzeige mit schnellen Updates brauche. Aber ich bin noch nicht so weit, es zu zeigen, weil das Projekt noch nicht abgeschlossen ist.


fxsaber:

Ich habe mir den Code nicht angesehen. Für solche Aufgaben ist Kanvas eine für alle "50 Linien".

Dann schauen Sie doch mal rein. Es ist das einzige dort!

 
Sie führen die Leute in die Irre.
Du willst es mir wirklich unter die Nase reiben, nicht wahr?
Ich wusste, dass du so etwas tun würdest. Und ich wusste, dass du dir so etwas ausdenken würdest.

Sie wissen nicht, wie man Vergleichstests vorbereitet.

 
Mihail Matkovskij:

Denn im Visualiser ist es die langsame Geschwindigkeit von Canvas, die die Probleme verursacht. Und Sie können sehen, welche das sind. Eine solche Anzeige frisst mehr als 50 % der CPU-Zeit, ich habe es oben erwähnt! Und in Terminal müssten Sie die Methoden in einer Schleife aufrufen, um alles zu sehen. Aber ich habe mich nicht darum gekümmert. Ich habe einen Expert Advisor in der Schleife mit Offline-Optimierung laufen, wo ich eigentlich eine solche Anzeige mit schnellen Updates brauche. Aber ich bin noch nicht so weit, es zu präsentieren, da das Projekt noch nicht abgeschlossen ist.


Dann schauen Sie es sich an. Es ist das einzige dort!

Nun... wenn Sie nur für einen Visualisierer schreiben, dann spielen Sie diese Spiele alleine. Haben Sie noch nie davon gehört, dass Grafiken, selbst Markierungen zum Öffnen/Schließen von Positionen, den Renderer verlangsamen? Nein.

Ich werde versuchen, Sie nicht zu stören... erstellen Sie separate Etiketten für jeden Buchstaben... und auch eine separate Ressource...

 
Nikolai Semko:
Sie führen die Leute in die Irre.
Du willst es mir unter die Nase reiben, nicht wahr?
Ich wusste, dass du so etwas tun würdest. Ich wusste, dass du so etwas tun würdest.

Sie wissen nicht, wie man Vergleichstests vorbereitet.

Alles, was ich aus Ihrem Beitrag verstanden habe, waren die Worte "Täuschung", "LOL" und "Ich weiß nicht, wie man Tests vorbereitet". Ich verstehe wirklich nicht, was sie mit diesem Thema zu tun haben... Den Rest verstehe ich von dem Wort "überhaupt" nicht! Als ich diesen Thread eröffnete, wollte ich hierkonstruktive Kritik sehen, nicht einen Haufen unverständlicher Behauptungen! Machen Sie sich also die Mühe, Ihre Worte zu erklären. Ansonsten schreiben Sie hier keinen Unsinn!

 
Alexey Viktorov:

Nun... wenn Sie nur für den Visualisierer schreiben, dann spielen Sie diese Spiele allein. Haben Sie noch nie gehört, dass Grafiken, selbst Positionsmarkierungen zum Öffnen/Schließen, den Visualizer verlangsamen? Nein.

Ich werde versuchen, Sie nicht zu stören... erstellen Sie separate Etiketten für jeden Buchstaben... und auch eine separate Ressource...

Ich beeilte mich, Sie zu informieren, Alexej. Sie neigen natürlich zum Phantasieren, genau wie Nikolai... Aber es ist nicht wirklich so, wie Sie es sich vorstellen. Es ist ganz einfach so, dass für unterschiedliche Aufgaben unterschiedliche Lösungen erforderlich sind. Haben Sie und Nikolai irgendwelche substanziellen Kommentare?

 
Mihail Matkovskij:

Alles, was ich aus Ihrem Beitrag verstanden habe, waren die Worte "Täuschung", "LOL" und "Ich weiß nicht, wie man Tests vorbereitet". Ich verstehe wirklich nicht, was sie mit diesem Thema zu tun haben... Den Rest verstehe ich von dem Wort "überhaupt" nicht! Als ich diesen Thread eröffnete, wollte ich hierkonstruktive Kritik sehen, nicht einen Haufen unverständlicher Behauptungen! Machen Sie sich also die Mühe, Ihre Worte zu erklären. Ansonsten schreiben Sie hier keinen Unsinn!

Geduld, mein Freund, Geduld.
Ich habe nicht so viel Zeit wie Sie. Ich bin im letzten Semester und habe drei Gruppenprojekte parallel laufen. Ich bin also im Impulsmodus hier.
Aber gut, ich kann Sie davon überzeugen, dass Sie sich täuschen, aber entspannen Sie sich und strengen Sie sich nicht zu sehr an, sonst sind meine Bemühungen umsonst.
Es sei denn, Ihr Verstand kann Ihre Emotionen zügeln.
 
Nikolai Semko:
Geduld, mein Freund, Geduld.
Ich habe nicht so viel Zeit wie Sie. Ich bin im letzten Semester und habe drei Gruppenprojekte parallel laufen. Ich bin also aus einem Impuls heraus hier.
Aber gut, ich kann Sie von Ihrem Irrglauben überzeugen, aber entspannen Sie sich und arbeiten Sie nicht so hart, sonst sind meine Bemühungen umsonst.

Fahren Sie fort. Verstehen Sie erst einmal den Coderichtig, denn der Code ist eine komplizierte Sache, und ich brauche klar begründete Forderungen!

 

Das verstehe ich nicht. Das erste Bild hat eine Leinwand, auf der sich ein Text befindet.

Die nachfolgenden Bilder haben keinen ähnlichen Text auf der Grafik.

Ich meine, was wurde damals verglichen?

 
Mihail Matkovskij:

Fahren Sie fort. Aber verstehen Sie erst einmal den Coderichtig, denn Code ist eine komplizierte Sache, und ich brauche eine klare argumentative Aussage!

Ich werde Ihren Code nicht "richtig" verstehen. Denn ich habe mich bereits damit befasst. Kurzes Urteil: Wehe dem, der nicht aufpasst.
Damit Sie meinen Code besser verstehen, den ich in den nächsten Monaten schreiben werde.