Chaque semaine, découvrez de nouvelles astuces et bonnes pratiques pour devenir un expert !
Voir l'indexle 10-03-2019 09:55 AM
Récemment, j’ai cherché à optimiser un workflow qui traite 55 millions d’enregistrements en 1heure.
En utilisant l’outil de profiling (voir le tip de @WilliamR: Tips de la semaine (3.1):Améliorer la performance de son workflow), j’ai découvert qu’une des fonctions les plus gourmandes était une « batch macro » qui itérait 150 fois.
Cette « batch macro » qui s’exécute en approximativement 17 secondes contient un filtre « complexe » (c.à.d. avec 2 conditions liées par un « AND ») qui représente la majorité du temps de traitement.
Sur les conseils de @WilliamR, j’ai converti ce filtre « complexe » en une suite de 2 filtres simples et voici les résultats en terme de performance :
Sur 55 millions d’enregistrements, 1 itération de la batch macro :
Filtre 1 |
Filtre 2 |
Temps d’exécution (secondes) |
Variable texte = condition AND Variable numérique != 0 |
Non |
17,1 |
Variable texte = condition |
Variable numérique != 0 |
16,1 |
Variable numérique != 0 |
Variable texte = condition |
13,1 |
Soit un gain de 30% en mettant 2 filtres simples en cascades… et en prenant soin de mettre le type de donnée le plus simple (numérique) avant le filtre sur la variable « chaine » qui est, de façon logique, plus lent en exécution.
Comme souvent, les solutions « élégantes » (ici filtre complexe) ne sont pas toujours les plus performantes !