++i ou i++ ? Tel est la question!
Combien de fois j’ai vu :for(int i = 0; i {
...
}
Le plus étonnant, c’est la réponse donnée par un programmeur qui fait cela. La plupart du temps, il répond que c’est plus rapide, c’est une optimisation… Sauf que dans 99.99% des cas, si on demande combien on gagne concrètement, il ne sait pas répondre, tout simplement car c’est une optimisation pifométrique. Rien ne dit que ce code sera plus optimisé et encore moins que l’application ira plus vite.
Après, on trouve d’autres personnes qui vont plus loin :int vsize = vec.size();
for(int i = 0; i {
...
}
J’ai même vu :int vsize = vec.size();
for(; --vsize != 0;)
{
...
}
Le problème n’est pas l’optimisation en elle-même mais plutôt le fait d’optimiser au pif n’importe quelle partie du code quitte à la rendre moins lisible sans aucun gain réel de performance. Surtout que la règle des 80/20 est très souvent applicable. Seulement 20% du code prend 80% du temps CPU.
Si on veut vraiment optimiser du code, alors il faut le faire comme une tâche à part entière et suivre un processus simple:
- Bencher son application
- Détecter la fonction la plus lente
- Optimiser la fonction la plus lente
- Recommencer à l’étape 1
Au moins, on sait pourquoi on optimise, on a une bonne raison de rendre la fonction moins lisible et on peut donner le gain réel qui a été obtenu.
Parfois, ce n’est même pas en optimisant son code qu’on gagne en vitesse. Le dernier exemple en date a été une bonne leçon pour moi… Dans Ryzom, on a voulu changer la stl, plutôt que de prendre celle par défaut de Visual Studio 9, on a essayé STLport, pour voir. A la base c’était surtout pour tester en mode Debug et voir s’il détectait des problèmes au runtime (ce que STLport fait très bien).
En Release, on s’est rendu compte que le client Ryzom tournait 25% plus vite. C’est ENORME quand on sait que l’on a juste changé une librairie.
Alors s’il vous plaît, arrêtez de vous prendre la tête avec vos boucles for et autres optimisations locales et, si vous voulez vraiment optimiser, concentrez vous réellement sur ce qui rame.

