Developpez.com - Rubrique Qt

Le Club des Développeurs et IT Pro

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 :

Code :
1
2
3
4
5
int main() {
  QCoreApplication app(argc, argv);
  QTimer::singleShot(3000, &app, SLOT(quit()));
  return app.exec();
}
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.
  Discussion forum
8 commentaires
  • dourouc05
    Responsable 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).
  • marc.collin
    Membre émérite
    Envoyé par bmoez.j
    donc KDE 5.X sera trés légère et rapide et sa grand probleme se résoudra?
    En fait faut juste éviter d'utiliser kubuntu et kde tourne comme par magie beaucoup mieux.

    Envoyé par Squisqui

    C'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.0
    Il y a eu énormément de changement d'architecture ainsi que des concepts clés.

    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.
  • Daïmanu
    Membre émérite
    Et 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++11
  • Gugelhupf
    Modérateur
    Et qu'en est il du temps de compilation ?
    16 fois moins d'instructions... 16 fois plus rapides ?

    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++11
  • LittleWhite
    Responsable 2D/3D/Jeux
    Envoyé par Squisqui
    C'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.0
    Bah, 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.
  • xelab
    Membre expérimenté
    Envoyé par marc.collin
    En fait faut juste éviter d'utiliser kubuntu et kde tourne comme par magie beaucoup mieux.
    Rhoo le troll , j'ai un kubuntu à jour qui tourne parfaitement bien chez moi.
  • Squisqui
    En attente de confirmation mail
    Envoyé par dourouc05
    (ce qui n'est absolument pas le cas des dernières versions de KDE, d'après mon expérience personnelle)
    C'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.0
  • bmoez.j
    Nouveau Candidat au Club
    donc KDE 5.X sera trés légère et rapide et sa grand probleme se résoudra?