Non, je n'ai pas de soucis avec la lettre « r » de mon clavier. Il s'agit bien de mémoïsation C'est quand même un concept de mémorisation de données .
Lorsque vous utilisez un traitement long pour calculer ou rechercher des données et, si ce même traitement avec les mêmes paramètres est amené à être appelé plusieurs fois, alors il peut être intéressant de conserver le résultat pour y accéder sans réexécuter le traitement. C'est ce que l'on appelle la mémoïsation.
Le principe est donc de stocker les résultats et les paramètres. On utilise pour cela un tableau associatif de variant. La clé du tableau sera une chaine obtenue en concaténant le nom de la procédure et les différents paramètres. Je vous conseille d'ajouter un séparateur pour éviter les faux doublons. Cette chaîne sera hashée et servira de clé pour le tableau.
Au lieu d'appeler directement la procédure, il faut appeler une fonction qui recherche dans le tableau et renvoie le résultat ou appelle la procédure et stocke le nouveau résultat.
Voici un exemple de procédure de Mémoisation. Elle utilise un tableau de Variant qui devra être global :
Procedure Memoise(sProcedureAppelée est une chaîne,*)
sParam est une chaîne sSeparateur est une chaîne = "@#@"
sParam=sProcedureAppelée+sSeparateur POUR i = 1 _À_ MesParamètres..Occurrence sParam+=MesParamètres[i]+sSeparateur FIN
bufCle est un Buffer = HashChaîne(HA_HMAC_MD5_128,sParam)
SI gtabMemoisation[bufCle]..Vide ALORS gtabMemoisation[bufCle] = ExécuteTraitement(sProcedureAppelée,trtProcedure,MesParamètres[2 À ]) FIN
RENVOYER gtabMemoisation[bufCle]
L'appel de votre procédure :
moRes est un monétaire = CalculeCA(DateDuJour,nMagasin,nRayon)
devient alors :
moRes est un monétaire = Memoise("CalculeCA",DateDuJour,nMagasin,nRayon)
Il y a certainement des évolutions possibles de ce code comme par exemple ajouter un time stamp de validité pour le résultat.
Ce type de traitement est intéressant bien entendu lorsque le résultat est relativement constant dans le temps et que le temps d'exécution de la procédure est long.
|