J'ai une fonction qu'il me faut être rapide, car je l'utilise dans une formule de colonne sur des tables de 500 Ko à 21 millions de lignes.
En essayant d’optimiser la vitesse, j’ai fait des analyses comparatives. J'ai accéléré le plus vite possible et c'était encore lent.
Ma fonction utilisait certaines matrices en tant que tables de recherche. Je les ai chargés en mémoire dans une étape précédente, dans mon script de démarrage de session. Je les chargeais dans des variables qualifiées d'espaces de noms pour éviter d'encombrer les espaces de noms globaux.
En tant que Hail-Mary, j'ai essayé de les charger à la place dans des variables globales (non qualifiées par un espace de noms).
À ma grande surprise, le corps de la fonction exécuté dans moins de 1 / 10e du temps en utilisant simplement des variables globales pour contenir mes tables de recherche statiques, plutôt que celles qualifiées par un espace de noms. Pour souligner, ces tables sont déjà résidentes en mémoire avant l'appel de la fonction; il ne s'agit pas de les peupler, mais simplement de les référencer.
Est-ce que d'autres personnes ont cette expérience?
(J'ai joint une capture d'écran de l'écran de mise au point afin que vous puissiez voir les timings comparatifs. Je ne fais que comparer le corps des fonctions ici, vous ne voyez donc pas le wrapper de fonctions.)

Je peux confirmer que dans JMP 15 et JMP 16, nous avons fait du travail pour rendre les recherches d'espace de nom plus rapides et elles sont beaucoup plus rapides. Ils seront toujours plus lents que l'utilisation de l'espace de noms global car nous devons faire des recherches des deux côtés des deux points (:), mais ils sont beaucoup améliorés depuis l'époque de la publication originale.