Gains de performances de Qt 5 par rapport à Qt 4
Une consommation de mémoire vingt fois moindre pour lancer une boucle d'événements
Le 2012-08-14 17:29:30, par dourouc05, Responsable Qt & Livres
En ce qui concerne la robustesse et la sécurité, il vaut souvent mieux avoir plusieurs démons (services en terminologie Windows), plus ciblés, plutôt qu'une grosse application monolithique. Avec Qt 4, il était possible de choisir les modules que l'on souhaitait pour son application – ainsi, on pouvait avoir un démon sans GUI. Avec les considérations architecturales orientées plateformes embarquées et la modularisation de Qt 5, on atteint un autre niveau.
Si on prend une simple application Qt, sans interface graphique, qui ne fait que lancer une boucle d'événements et attend trois secondes, tant pour Qt 4 que Qt 5, on a ce code :
Sur une distribution Kubuntu 12.04, en 32 bits, avec Qt 4.8.1, massif (un outil disponible avec valgrind) reporte une utilisation mémoire maximale de 102 ko ; callgrind, un coût d'instructions d'approximativement 1,9 million (en ne comptant que les instructions exécutées dans main()). Avec Qt 5, le même massif sur le même système d'exploitation reporte une utilisation mémoire maximale de 4,9 ko (!), callgrind un coût de 114 000 (!). En d'autres termes, Qt 5 consomme vingt fois moins de mémoire et seize fois moins d'instructions pour instancier un objet QCoreApplication et lancer une boucle d'événements.
Qu'est-ce qui a changé depuis Qt 4 ? Principalement, la gestion des chaînes de caractères : Qt 5 considère que toutes sont en Unicode et ne charge les codecs associés à d'autres encodages que s'ils sont réellement nécessaires (leur chargement a aussi été amélioré, mais ne rien charger est toujours mieux). De même, C++11 est utilisé par endroits, ce qui fait qu'il n'y a pas besoin d'allocation pour instancier une QString contenant une chaîne Unicode.
Source : QCoreApplication mini benchmark.
Si on prend une simple application Qt, sans interface graphique, qui ne fait que lancer une boucle d'événements et attend trois secondes, tant pour Qt 4 que Qt 5, on a ce code :
Code : |
1 2 3 4 5 | int main() { QCoreApplication app(argc, argv); QTimer::singleShot(3000, &app, SLOT(quit())); return app.exec(); } |
Qu'est-ce qui a changé depuis Qt 4 ? Principalement, la gestion des chaînes de caractères : Qt 5 considère que toutes sont en Unicode et ne charge les codecs associés à d'autres encodages que s'ils sont réellement nécessaires (leur chargement a aussi été amélioré, mais ne rien charger est toujours mieux). De même, C++11 est utilisé par endroits, ce qui fait qu'il n'y a pas besoin d'allocation pour instancier une QString contenant une chaîne Unicode.
Source : QCoreApplication mini benchmark.
-
dourouc05Responsable Qt & LivresÇa ne pourra pas lui faire de tort, mais toute application trop lourde et mal écrite dès le début restera lourde et mal écrite (ce qui n'est absolument pas le cas des dernières versions de KDE, d'après mon expérience personnelle).le 14/08/2012 à 20:20
-
marc.collinMembre émériteEn fait faut juste éviter d'utiliser kubuntu et kde tourne comme par magie beaucoup mieux.
Envoyé par Squisqui
Certaines distribution s'en n'ont mieux sortie que d'autre en prenant ce qui fonctionnait sous kde 4 et lorsque ça ne fonctionnait pas avec la version 4, il optait pour la version 3.x
Suse a opté pour cette solution. Pas parfaite, mais l'utilisateur pouvait profiter de kde 4 sans tout les problèmes.....
Ce n'est pas vraiment ce qui est à l'ordre du jours pour kde 5.le 15/08/2012 à 10:21 -
DaïmanuMembre émériteEt qu'en est il du temps de compilation ?
J'imagine qu'il doit être réduit vu les changements de QString et l'utilisation de C++11le 14/08/2012 à 20:47 -
GugelhupfModérateurEt qu'en est il du temps de compilation ?
Est-ce que le temps de compilation est vraiment une contrainte par rapport au gain de mémoire énorme qu'apporte cette nouvelle version ? (encore faut-t-il que ces tests soient avérées dans 100% des cas).
Même s'il a prit du retard, vive C++11le 14/08/2012 à 21:02 -
LittleWhiteResponsable 2D/3D/JeuxBah, normalement, le portage devrait être simplifié. Du moins, c'est ce que l'on nous annonçait du temps des Qt Developers Days en Octobre 2011. Juste un script permettant de transformer un code Qt 4 en code Qt 5 (changement de 2 / 3 entêtes et autres babioles). Donc, à cette époque (et je ne vois pas pourquoi cela changerai) la transition semblait beaucoup moins douloureuses que du temps de Qt 3 -> Qt 4.
En même temps, il faut dire que la transition Qt 3 -> Qt 4 avait été assez compliqué (beaucoup de changement dans l'architecture même de Qt et des classes à utiliser). Donc Nokia voulait rassurer les développeurs en disant qu'ils ne reproduiront pas cela.le 15/08/2012 à 0:24 -
xelabMembre expérimentéRhoo le troll
, j'ai un kubuntu à jour qui tourne parfaitement bien chez moi. le 16/08/2012 à 12:04 -
SquisquiEn attente de confirmation mailC'est un excellent gestionnaire de bureau, mais les développeurs se sont bien cassés les dents lors du passage 3.5 -> 4.0.
Je me demande comment ça se passera pour KDE 5.0le 14/08/2012 à 21:11 -
bmoez.jNouveau Candidat au Clubdonc KDE 5.X sera trés légère et rapide et sa grand probleme se résoudra?le 14/08/2012 à 18:42