Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Un test montre que du code utilisant le Framework Qt est plus court
Plus lisible, et plus rapide à compiler et à exécuter. Votre expérience ?

Le , par dourouc05

0PARTAGES

0  0 
Votre expérience sur Qt ?
Bonjour,

Qt est un framework de plus en plus utilisé. Cependant, à l'instar des frameworks PHP, il se pourrait que Qt ralentisse plus les applications développées que ce qu'il ne facilite le développement.

Hors André, sur les Qt Labs, nous a produit un petit benchmark : pour séparer une chaine en plusieurs autres, il a comparé une version utilisant la librairie standard, et une autre utilisant Qt.

Il en résulte que le code utilisant Qt est nettement plus court, plus lisible, plus rapide à compiler... et presque deux fois plus rapide !

I wanted to do a certain bit of benchmarking for quite a while - years actually - but triggered by one of those friendly discussions on the ##c++ channel on FreeNode I finally figured I should sit down and actually do it. I was expecting some interesting results, but the not at the scale that we will see below.

If you ask the resident channel bot on ##c++ how to tokenize a std::string you’ll get offered the following (slightly compacted) code snippet:
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
  #include <sstream>
  #include <vector>
  #include <string>

  std::string str("abc:def");
  std::istringstream split(str);
  std::vector<std ::string> tokens;
  for (std::string each; std::getline(split, each, ':'); tokens.push_back(each));
Obviously, that’s the “Without Qt” version: Clean Standard C++, as straight-forward as it can get. The contender “With Qt” is:

Code : Sélectionner tout
1
2
3
4
5
  #include <QString>
  #include <QStringList> 

  QString str("abc:def");
  QStringList tokens = str.split(':');
From the source alone we can collect a few numbers:
Property Without Qt With Qt Ratio
Code to type 3 lines 1 line 3.0
147 char 35 chars 4.2
Code usable as sub-expression no yes
Size of compilation unit [1] 22215 lines 7590 lines 2.9
Compile time [2] 1.64s 1.02s 1.6

To compare performance I use a benchmark that I just checked into the Qt source base, under tests/benchmark/qstringlist. It basically consists of running the above mentioned snippets on a string “unit:unit:unit:….” with 10, 100, 1000, and 10000 “unit” chunks and record callgrind’s “instruction loads per iteration” as follows:
Chunk count Without Qt With Qt Ratio
10 chunks 18,455 9,827 1.9
100 chunks 134,578 71,008 1.9
1000 chunks 1,244,425 641,174 1.9
10000 chunks 13,161,115 7,053,633 1.9

In this case, bigger numbers mean more time needed to execute. Interesting, isn’t it?

After reading Thiago’s latest posts I got the impression that people like conclusions. The verbose version of a conclusion might be something along the lines of

Using Qt’s functions to split a string you need about a third of the effort to write code, and get a 47% performance boost at runtime.

Or shorter (Qt way): “Code less, create more”.

André

[1] Counted with “g++ -E -DQT_NO_STL -I$QTDIR/include/QtCore -I$QTDIR/include qt.cpp | wc” using g++ Ubuntu 4.3.3-5ubuntu4.

[2] Fastest result of “real” time, out of 20 runs each. “user” times in both scenarios smaller, with similar ratio. Source

Et vous ?
Avez-vous l'impression qu'utiliser un framework tel que Qt peut ralentir, ou, au contraire, accélérer votre application ?
Avez-vous déjà effectué de tels tests ? Les résultats sont-ils aussi convaincants ?

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de ZeRevo
Membre averti https://www.developpez.com
Le 25/08/2009 à 21:21
QT lave plus blanc que blanc !

ils ont choisi cet exemple pour vendre leur produit.
Je suis incapable de t'aider j'ai jamais travaillé avec QT
1  0 
Avatar de dourouc05
Responsable Qt & Livres https://www.developpez.com
Le 25/08/2009 à 21:26
Citation Envoyé par ZeRevo Voir le message
ils ont choisi cet exemple pour vendre leur produit.

C'est pour ça que d'autres en vantent encore les mérites : http://zrusin.blogspot.com/2006/10/benchmarks.html.

Ici, Qt 4.3, une vieille version de 2006, est comparé à d'autres librairies pour des affichage du même genre, et Qt, soit les dépasse, soit les écrase.

Cependant, il est vrai que choisir de comparer à la STL, ce n'est pas l'idéal : les performances varient en fonction de l'implémentation du compilateur, il aurait fallu tester Qt contre plusieurs autres implémentations...
0  0 
Avatar de yan
Rédacteur https://www.developpez.com
Le 25/08/2009 à 22:07
Citation Envoyé par dourouc05 Voir le message
il se pourrait que Qt ralentisse plus les applications développées que ce qu'il ne facilite le développement.
C'est à dire? Pour un débutant, un gourou C++ ou le commun des mortels?
0  0 
Avatar de LittleWhite
Responsable 2D/3D/Jeux https://www.developpez.com
Le 26/08/2009 à 0:31
Très difficile, je dirai comme question. En règle général je ne ressens pas de gêne sur les performances. En plus comme c'est de l'interface utilisateur, on se fout (un peu) des performances.
Je dirai juste que j'ai jamais eu de problème avec Qt, et que je code relativement vite avec. Même les trucs difficile sont facile avec Qt ( Regexp, jeu avec les chaines, jeu avec les fichiers ).
Par contre, si vous voulez vraiment un problème de ralentissement, n'ouvrait pas trop de QMovie, pour faire les animations des .gif ( ça bouffe du CPU ). ( bon faut dire que mon programme n'est pas optimisé ( ouverture de plusieur fois le même .gif ).
0  0 
Avatar de Gulish
Membre éprouvé https://www.developpez.com
Le 26/08/2009 à 9:15
Citation Envoyé par yan Voir le message
C'est à dire? Pour un débutant, un gourou C++ ou le commun des mortels?
Je crois que Yan résume bien la situation. De manière générale, le maximum de performance est obtenu en codant quelque chose de spécifique à l'application, tout en restant au plus bas niveau possible. La généricité et la flexibilité de Qt a forcément un coût.

Cependant, pour coder un truc parfaitement optimisé, il faut avoir un groupe d'experts (le développeur moyen n'arriverait jamais au bout, ou ferait des erreurs). Donc l'utilisation de Qt (plutôt bien développé de manière générale) permet finalement au débutant de faire une application de bien meilleure qualité que s'il l'avait faite lui même. (Et bien sûr Qt permet de concevoir/développer ses applications plus aisément).

Et compte tenu de la puissance moyenne des machines aujourd'hui, on préfère bien souvent privilégier un grand gain de temps à une petite perte de performances. (Seules quelques rares applications requièrent encore une optimisation particulière).

G.
0  0 
Avatar de Alp
Expert éminent sénior https://www.developpez.com
Le 26/08/2009 à 9:20
J'utilise Qt entre autres dans un projet où les perfs sont capitales, et il s'en sort plutôt bien

Mais cela dépend de qui écrit le code, et de sa connaissance des subtilités de Qt, en règle générale.
0  0 
Avatar de yan
Rédacteur https://www.developpez.com
Le 26/08/2009 à 10:21
Je me demande surtout, que je ne comprend pas d'où viens le
"Qt ralentisse plus les applications développées que ce qu'il ne facilite le développement."
Mon ressentie c'est cela :
* débutant : Il débute, donc pour lui performance ne représente rien. De plus avec toute les optimisations interne faite par Qt, il ne fera pas mieux dans un premier temps.
* gourou c++ : faux, il exploitera correctement les optimisations.
* le commun des mortels : possible. Tout dépend de la philosophie de codage du programmeur. Par exemple, un code sans aucun const sera surement moins rapide. Une personne qui ouvre une même image plusieurs fois pour une icône répété dans l'ihm, consommera plus de mémoire. Dans ces deux cas, le pattern Copy-on-write de Qt n'est pas exploité.

Sainon, c'est toujours le problème des benchmark. Le résultat est toujours bancale. Il y as tellement de facteur qui rentre en jeux.

Pour ce qui est des optimisation, voici quelques liens :
http://qt.developpez.com/doc/4.5/shared/
http://qt.developpez.com/doc/4.5/qsh...eddatapointer/
http://qt.developpez.com/doc/4.5/qex...eddatapointer/
0  0 
Avatar de Firwen
Membre expérimenté https://www.developpez.com
Le 26/08/2009 à 16:02
Je pense que Qt peut améliorer les performances mais pas de la façon dont vous l'entendez.

Qt a tendance à simplifier grandement le développement C++ qui est habituellement fui par les jeunes développeurs comme la peste noire .
Un jeune développeur sur un projet qui opte pour une solution C++/Qt au lieu d'une solution en code managé ( C# / java / VB.NET / Groovy ) obtiendra "généralement" un gain en performance notable.

Donc je dirais que le coté facile à prendre en main et la documentation excellente de Qt associé à son "code natif" permet indirectement d'améliorer les perfs d'un projets oui.
0  0 
Avatar de cayou66
Membre actif https://www.developpez.com
Le 26/08/2009 à 16:54
Avis personnel:
travaillant sur des bases de systèmes temps réel, avec acquisitions hautes fréquences, sur des machines pas spécialement rapides, je dois dire que Qt convainc pour l'instant, en tout cas il ne fait pas pire que VS avec les MFC.

Comme dis plus haut, c'est d'abord une question de codage
0  0 
Avatar de yan
Rédacteur https://www.developpez.com
Le 26/08/2009 à 20:40
j'ai voté "Qt améliore la productivité et les performances" car je commence à maitriser le framework et à jouer avec les optimisations qu'il fournies.
0  0