Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Nein Perth, immer noch zu viel. Deine Oberfläche mit all dem Text, den Schatten usw. erreicht auf einem schwachen Prozessor maximal 50 ms.
Ja, ich werde alles noch einmal überprüfen. Aber das ist nicht der Punkt. Der Zeichenblock zeichnet nicht nur. In ihm gibt es logische Labyrinthe, die eingehende Ereignisse verarbeiten. Sie werden benötigt, um zu entscheiden, was gezeichnet werden soll und was nicht. Sie entscheiden, woher die Bilder kommen und wo und wie sie überlagert werden sollen. Wenn es sich um eine einfache Zeichenfunktion mit 100 Linien handeln würde, gäbe es nichts zu sagen. Aber dies ist ein massiver Mechanismus, der sicherstellt, dass ALLES gezeichnet wird.
Das ist es wert, berücksichtigt zu werden.))
Ich verwende einfach NICHT die Standard-Leinwand :).
...
Und dies ist eine angenehme Überraschung. :) Selbstentfaltung ist immer cool. Auch wenn sie unvollkommen ist.
Ich habe nichts gegen die Ccanvas-Klasse (ich habe sogar ihre Funktionalität in die Konstruktor-Dateien aufgenommen), aber ich benutze sie noch nicht. Das Schlüsselwort ist "noch". Ich habe große Pläne für sie. Für die Zukunft.
Ja, ich werde alles doppelt überprüfen. Aber das ist nicht der Punkt. Der Zeichenblock zeichnet nicht nur. In ihm gibt es logische Labyrinthe, die eingehende Ereignisse verarbeiten. Sie werden benötigt, um zu entscheiden, was gezeichnet werden soll und was nicht. Sie entscheiden, woher die Bilder kommen, wo und wie sie überlagert werden sollen. Wenn es sich um eine einfache Zeichenfunktion mit 100 Linien handeln würde, gäbe es nichts zu sagen. Aber dies ist ein massiver Mechanismus, der sicherstellt, dass ALLES gezeichnet wird.
Das ist es wert, berücksichtigt zu werden.))
Nein, wenn das Ereignismodell korrekt implementiert ist, dauert es nicht länger als eine Mikrosekunde (ein Millionstel einer Sekunde), selbst wenn es Tausende von Prüfungen gibt.
Ich bin nicht defensiv))) Ha ha. Ich erkläre nur. ))
Also gut. Ich werde mit einem einfachen Test beginnen. Ich fülle eine bildschirmfüllende Leinwand mit einer Farbe und messe die Zeit. Sie messen Ihre Rendering-Funktion und dann wird klarer, ob ich Bremsen in meinem Code habe. Vielleicht gibt es welche. Ich streite mich nicht. Ich muss es überprüfen.
Ich bin nicht abwehrend.) Ha ha. Ich erkläre nur. ))
Also gut. Ich werde mit einem einfachen Test beginnen. Ich werde eine Leinwand im Vollbildmodus mit einer Farbe füllen und die Zeit messen. Sie messen Ihre Rendering-Funktion und dann wird klarer, ob ich Bremsen in meinem Code habe. Vielleicht gibt es welche. Ich streite mich nicht. Ich muss es überprüfen.
Ich dachte, dass Sie vielleicht noch nie mit Profiling gearbeitet haben. Du arbeitest auch nicht mit Debugging.
Ich dachte, Sie haben vielleicht noch nie mit Profiling gearbeitet. Du arbeitest auch nicht mit Debugging.
Die Geschwindigkeit kann wahrscheinlich in den Hintergrund gedrängt werden, und die Optimierung für die Geschwindigkeit ist nicht etwas, das schnell gemacht werden kann, es ist besser, die Funktionalität für jetzt zu verbessern.
@Nikolai Semko
Nikolai, jetzt kam unerwartet die Antwort auf die Frage"warum es so lange dauert, eine Leinwandzu malen".
Die Fenster bestehen aus zwei Leinwänden! Diese Leinwände sind fast gleich groß. Also muss die Zeichenfläche mit zwei multipliziert werden. Aber das ist nur der Anfang.
Auf der Fensterfläche befinden sich große Bildlaufelemente (V_BOX), die ebenfalls vollständig mit der Originalfarbe gefüllt gezeichnet werden. Das heißt, wenn V_BOX den Hauptteil des Fensters einnimmt, sollte die Zeichenfläche mit drei multipliziert werden. Aber! Sie hat eine zusätzliche Leinwand. Das Bild wird auf dieser Leinwand gescrollt. Die Basis des Elements ist nur eine Bildlaufleiste. Kurz gesagt - die Zeichenfläche sollte mit vier multipliziert werden (vor allem, wenn die Bildlaufleiste lang ist). Und erst dann werden die Elemente gezeichnet.
Das scheint alles zu sein... Wir können einen Punkt setzen.Wir multiplizieren die Fläche des Fensters mit drei oder vier. Aber nein!
DieElemente selbst sind auch mehrschichtig. Jedes hat eine Basis. Die Basis wird immer von Grund auf neu gezeichnet, gefüllt mit der Originalfarbe. Dann werden die Rahmen über die Basis gezeichnet. Als nächstes werden die Symbole auf die bereits gezeichneten Teile des Elements gezeichnet. Und schließlich werden die Texte über alles gezeichnet.
Als Ergebnis sieht der Benutzer nur die endgültige Farbe auf jedem einzelnen Pixel. Aber an der Stelle dieses Pixels haben sich die Farben mehrmals geändert, während das ganze Fenster gezeichnet wurde.
Multiplizieren Sie dies nun mit 15 Fenstern.... Es wird deutlich, dass es keinen speziellen Fehler im Code gibt - ich habe extra die Ausführungsgeschwindigkeit von Teilen des Zeichenblocks gemessen, und 50 ms für einen Vollbildschirm funktioniert auch bei mir. Es ist nur so, dass ich am Ende viel mehr Bildschirme habe.
Ich habe eine Idee, wie ich den Code ändern und das Zeichnen um den Faktor 2 oder 3 beschleunigen kann. Aber ich werde es nach der Hauptarbeit tun.
Ich möchte mich bei Ihnen bedanken, dass Sie darauf bestanden haben, den Code zu überprüfen. Du hattest Recht. Das ist der Fall, wenn Kritik hilfreich ist.
Danke auch an @AndreyBarinov für den Hinweis mit dem Text. Vielleicht fällt mir ja noch etwas ein.