Fehler, Irrtümer, Fragen - Seite 977

 
Renat:
Es werden keine GDI-Methoden aufgerufen.

Ich meine TextOut. Ist das nicht ein System?

Ich verstehe die Bezeichnung, ich verbinde sie in keiner Weise mit GDI.

 
voix_kas:

Der Text ändert sich bei allen (der Hälfte) der Etiketten, die den Wert des Indikators und nicht seine Beschreibung anzeigen sollen. Sie können dies sehen, wenn Sie das Skript ausführen.

Entweder verstehe ich Sie nicht. Von welcher Linie sprechen wir genau?

Entschuldigung, ich habe von meinem Handy aus an der falschen Stelle geschaut und einen Fehler gemacht.

Ich werde meine eigenen Tests in den nächsten Stunden durchführen und den Quellcode und die detaillierten Ergebnisse veröffentlichen.

 
sergeev:

Ich meine TextOut. Ist das nicht ein System?

Ich verstehe die Bezeichnung, ich verbinde sie in keiner Weise mit GDI.

Ich dachte, bei GDI ginge es um Tags.

Die Änderung von Beschriftungsparametern ist nichts anderes als ein massives Einstampfen des Befehlsstroms in eine spezielle Warteschlange, ohne dass diese Daten tatsächlich an echte Objekte angehängt werden (Objekte gehören zum Diagramm, nicht zu MQL5), bis die Objektdaten gerendert oder zurückgelesen werden. Das heißt, die eigentliche Änderung der Objekte wird aufgeschoben. Wir haben diese Optimierung absichtlich angewandt, damit die Entwickler mit Zehntausenden von Objekten arbeiten können, ohne dass es zu Verzögerungen kommt.

Das heißt, bei der Änderung von Objekten wird die tatsächliche Ausführung verzögert, was ein Gefühl von Geschwindigkeit vermittelt. Tja, und die ganze Last des Zeichnens wird von der Schnittstelle (Grafik) der Anwendung getragen. Und beim Rendering funktionieren Optimierungsmethoden und das Abschneiden von Sichtbarkeitsgrenzen, so dass man normalerweise mit 300 000-500 000 Objekten pro Diagramm arbeiten kann.

Aber wenn man mit Bitmaps arbeitet, wird die gesamte Arbeit in MQL5 auf einmal erledigt, ohne jede Verzögerung, aber danach wird sie sofort beim Rendern erledigt. Und die Gesamtzeit für "Änderung + Rendering" einer Bitmap ist bei einer bestimmten Anzahl von Objekten wahrscheinlich schneller. Vor allem, wenn man bedenkt, dass die Bitmap zwischen den Aufrufen gespeichert wird und man nur das fertig zeichnen kann, was man braucht, anstatt die gesamte Leinwand neu zu erstellen.

Ich werde ausführliche Tests durchführen und die Ergebnisse veröffentlichen, die zeigen, wie Objekte und Bitmaps in verschiedenen Modi funktionieren.

 

Die Ergebnisse wurden in einem separaten Thread veröffentlicht: Leistungstest von einzelnen Textbeschriftungen und Bitmaps in einem Diagramm

Der Autor hatte einen schwerwiegenden Fehler in seinem Bitmap-Handling-Skript - in Wirklichkeit verwendete er zwei Bitmaps anstelle von einer und kopierte sie ständig ineinander, was die Leistung beeinträchtigte.

 
Renat:

Die Testergebnisse wurden in einem separaten Thread veröffentlicht: Leistungstest von einzelnen Textbeschriftungen und Bitmaps in einem Diagramm

Der Autor hatte einen schwerwiegenden Fehler in seinem Skript, als er mit Bitmaps arbeitete - in Wirklichkeit verwendete er zwei Bitmaps statt einer und kopierte sie ständig ineinander, was die Leistung beeinträchtigte.

Der Weg zur Beschleunigung des tatsächlichen Outputs ist also ein Fehler? :)

Ich habe hier bereits beschrieben, zu welchem Zweck die Vorlagen- und die Arbeitsleinwand eingeführt wurden.

 

Lass uns lange leben.

Das MQL5-Handbuch sagt datetime type https://www.mql5.com/ru/docs/basis/types/integer/datetime:

"Wertebereich vom 1. Januar 1970 bis 31. Dezember 3000. "

der Höchstwert bei 32535244799 ist 3001.01.01 07:59:59

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип datetime - Документация по MQL5
 
Der Test ist leistungsorientiert, so dass er nicht durch zusätzliche Vorgänge überlastet werden sollte.
 

Um die Reinheit der Programmierung zu verbessern, möchte ich die Öffentlichkeit zu diesem Thema befragen.

Angenommen, es gibt ein global deklariertes Flag (bool Flag). Wenn bestimmte Ereignisse/Bedingungen eintreten, muss er auf einen bestimmten Wert gesetzt werden.

Die erste Variante:

if (некое условие) {
  Flag = false;
}

Zweite Möglichkeit:

if (некое условие) {
  if (Flag) Flag = false;
}

Welche Option:

1. schneller in Bezug auf die Leistung?

2. Wenn ich so sagen darf, "professioneller"?

Es wird davon ausgegangen, dass dieser Abschnitt des Codes recht häufig kontrolliert wird, z. B. bei jedem Tick.

 
voix_kas:

Um die Reinheit der Programmierung zu verbessern, möchte ich die Öffentlichkeit zu diesem Thema befragen.

Angenommen, es gibt ein global deklariertes Flag (bool Flag). Wenn bestimmte Ereignisse/Bedingungen eintreten, muss dieser Wert gesetzt werden.

Natürlich ist die erste Variante schneller. Weniger Anweisungen und ein Vergleich/Verzweigung weniger.
 
Renat:
Die erste Option ist natürlich schneller. Weniger Anweisungen und auch ein Vergleich/Verzweigung weniger.
Ich danke Ihnen.
Grund der Beschwerde: