Qt 5.5.1 QPainter 30% langsamer?



  • Hallo,

    nach dem Update von Qt 5.5.0 auf Qt 5.5.1 laufen die Grafikanimationen meines Qt Programms ca. 30% langsamer (auf Windows 7 64bit).

    Die Animationen laufen auf QtWidget via QPainter und QFont.

    Nun habe ich schon etliche Qt Updates hinter mir. So etwas ist dabei noch nie passiert. Deshalb ging ich zuerst von einem eigenen Programmierfehler aus.

    Muss vielleicht ab Qt 5.5.1 in der Qt Project-Datei *pro ein Eintrag stehen, welcher Grafiktreiber genutzt werden soll? Das ist das einzige was mir dazu überhaupt einfällt. Weil ich die ganze Geschichte mit Angle vs OpenGL Treibern für Qt noch nie durchschaut habe. Meine Grafikkarte ist eine simple Einstiegskarte ATI Radeon HD3650 mit aktuellem Treiber.

    So klein wie der Sprung von Qt Version 5.5.0 auf 5.5.1 auf den ersten Blick ausschauen mag, ist das Update wohl nicht. Die Installationsdatei von v5.5.0 ist 650 MB, die von v5.5.1 dagegen 823 MB groß (Windows MSVC2013 64bit).

    Hat jemand eine Idee woran der Geschwindigkeitsverlust liegen könnte?



  • Windows MSVC2013 64bit

    Welche version vom 2013er hasst DU ? bei der Pro sollte der rudimentäre Profiler ja mit dabei sein. Da mal drüberschicken und schauen welche Funktion vom QPainter da genau so lahm geworden ist.

    Dann am besten noch mal detailiert im Qt Forum nachfragen ...

    Mittlerweile ist das Abhaengigkeitsmanagment und Qualitätsmanagment von Qt auch ehr nicht mehr so vorbildlich. Da braucht man 203740 Tools um das Zeugs kompilieren zu koennen ... und man hat zig Fehler in released Versionen, wo man haendisch nachbessern muss damit es kompiliert.
    Das sich da was einschleicht, wuerd mich nicht wundern.
    Möglich das die Offizielle Version da was nicht so optimales aber kompatibles kompiliert.

    Glaub der offizelle Qt Kunde ist eh nicht so der Perormance C++ Fetischist, sondern der Umsteiger aus anderen Sprachen oder Neustarter, der irgendwie ne C++ Vorgabe mit ner GUI verheiraten muss. Und das machens echt ned schlecht.

    Ich selber nutze Qt auch nur ungern für dinge die performance-kritisch sind. Oft allein ist die Plattformunabhängigkeit schon ne Bremse, und das obwohl man die evtl. gar nicht braucht. Ich sag immer, das Qt mehr mit Java entwicklung zu tun hat als mit C++ ... Java ist auch toll keine Frage, punktet aber in anderen Bereichen als unbedingt Performance.

    Für "performantes" malen mit Qt gibts aber auch Tricks, wenn man das Fenster / Layout - Handling weiter der QT überlassen will.
    Malen in Textures mit entsprechenden Libs -> rendern der Textur in nen GLWIdget
    Sich das (WIndows/X)Handle vom subfenster holen und mit entsprechenden Libs systemspezifisch malen ....

    Das aber nur als Hinweis wenn mit Qt gar ned weiter kommst ....

    Ciao ...



  • Hallo RHBaum,

    danke für die Anwort.

    Der Wechsel von Qt 5.5.0 auf Qt 5.5.1 ist für mich zum Alptraum geworden. Weil es mir nicht gelingt den Fehler zu isolieren. Da ich mit dem Qt Creator unter Windows arbeite, steht mir leider auch kein Profiler zur Verfügung.

    Ein abgespecktes Qt Grafik-Testprogramm zeigt den Fehler leider nicht. Ohne den Fehler lokalisiert zu haben, bringt es auch nichts ihn im Developer Forum zu posten.

    Nachdem ich eine Woche alles mögliche probiert habe, bin ich jetzt zu Qt 5.5.0 zurückgekehrt. Mit der kleinen Hoffnung, dass der Bug unter Qt 5.6.0 vielleicht wieder verschwunden ist.

    Während der Fehlersuche habe ich u.a. Qt 5.5.0 und Qt 5.5.1 nochmals downgeloaded und clean installiert. Kaum zu glauben, aber danach lief mein Programm mit beiden Qt Versionen langsam. 😕

    Bei näherer Untersuchung des neu downgeloadeten und installierten Qt 5.5.0 musste ich dann feststellen, dass u.a. Qt5Core.dll und Qt5Cored.dll den Zeitstempel 23.10.2015 tragen! Im ursprünglichen Qt 5.5.0 jedoch vom 11.08.2015 sind.

    Der reine Austausch dieser beiden DLL brachte nichts. Erst als ich erneut einen clean Install der ursprünglichen Qt 5.5.0 Version (mit Qt5Core.dll und Qt5Cored.ell vom 11.08.2015) ausführte, lief mein damit neu compilertes Qt Programm wieder so schnell wie zuvor.

    So ein Trauerspiel hatte ich mit Qt bislang noch nie.



  • Du kannst die kostenlose Community Edition von Visual Studio nehmen, da ist ein Profiler dabei.

    Ich weiß allerdings nicht, ob man damit solche Probleme jetzt unbedingt ohne weiteres findet...



  • Hallo Mechanics,

    MSVC 2013 Community habe ich auf der Platte, damit aber noch keine Qt Programme geschrieben. Danke für den Hinweis auf den Profiler - bislang hatte ich einen Profiler noch nicht benötigt.

    Ich hatte gehofft, dass andere vielleicht einen ähnliche Performance Verlust beim Update auf Qt 5.5.1 beobachtet haben und vielleicht mehr wissen als ich. Ich programmiere ja erst ein knappes Jahr in Qt und bin alles andere als ein Experte darin.

    Falls in Foren niemand sonst von Performance Problemen mit Qt 5.5.1 berichtet (was ich fast befürchte), werde ich einfach Qt 5.6.0 abwarten, ob der Bug sich darin vielleicht verflüchtigt. Falls nicht, werde wohl dann einen neuen Anlauf mit MSVC 2015 Community mit Profiler nehmen müssen.



  • Zum einen arbeiten wir noch mit Qt 4, zum anderen ist mir auch nicht ganz klar, was es mit den Animationen und der Performance genau auf sich hat. Ich mein, Qt ist bei weitem schnell genug, um eine "normale" oder auch etwas verspielte GUI oder einfache 2D Grafiken darzustellen. Ich hab keine Erfahrung mit etwas, was darüber hinausgeht. Keine Ahnung, was es da für Effekte gibt, wie sie funktionieren, und warum man sie benutzen sollte.



  • Mein Programm zeichnet mit QPainter via QFont mit drei verschiedenen Fonts ca. 40 Daten mit 15 Zeichen Breite in normaler horizontaler Ausrichtung an beiden Bildschirmseiten. Während die Grafik in der Mitte bestehend aus 30 QFont Einzelsymbolen zusammen mit ca. 800 Linien verschiedener Dicke im Kreis rotiert wird (die Einzelsymbole bleiben dabei immer horizontal ausgerichtet). Abgesehen von der Anzahl der Elemente also nichts Besonderes.

    Das ganze wird über einen QPushbuttom mit einem AutoRepeat Wert "0" im Dauerfeuer, oder alternativ über timerEvent() mit startTimer(0) in Bewegung gesetzt. In der Einsprungfunktion Pushbuttom_clicked() bzw. timerEvent() werden die Rotationsdaten berechnet und mit CentralWidget-update() der Bildschirm aktualisiert.

    Ich glaube ich habe mit Qt 5.0 angefangen. Bis einschließlich dem Update auf Qt 5.5.0 war die Geschwingigkeit völlig in Ordnung. Ab Qt 5.5.1 läuft das identische Programm jedoch 30% langsamer.



  • Woher weißt du, dass es 30% sind? Vielleicht kann man das grundsätzlich besser implementieren, vorberechnete Daten cachen usw.?



  • Mechanics schrieb:

    Woher weißt du, dass es 30% sind?

    Ich habe 10 aufeinanderfolgende Grafik-Rotationen mit der Stopuhr gemessen und verglichen.

    Mechanics schrieb:

    Vielleicht kann man das grundsätzlich besser implementieren, vorberechnete Daten cachen usw.?

    Die Grafik wird in 1° Grad Schritten rotiert. Die Daten ändern sich mit jedem 1 Grad Schritt ebenfalls. Und es sind immer wieder andere neue Daten, die als Dokument eingelesen und als Grafik angezeigt und rotiert werden.



  • Sorry falscher Alarm von mir: Qt v5.5.1 läuft genauso schnell wie seine Vorgänger.

    Die Verlangsamung wurde durch einen Bug in meinem Qt-Programm verursacht, den ich mittlerweile beheben konnte. (Fehlerhafte Initialisierung einer Fremd-DLL).


Log in to reply