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,*)

s
Param est une chaîne
sSeparateur est une chaîne = "@#@"


// On recherche dans le tableau si la fonction a déjà été appelée.

// avec les mêmes paramètres.
sParam=sProcedureAppelée+sSeparateur
POUR i = 1 _À_ MesParamètres..Occurrence
sParam+=MesParamètres[i]+sSeparateur
FIN

// Hashage de la clé.
bufCle est un Buffer = HashChaîne(HA_HMAC_MD5_128,sParam)

// Si la procédure a déjà été appelée avec les mêmes paramètres
// On renvoie le résultat en mémoire sinon, on appelle la procédure et
// on stocke le nouveau résultat.
SI gtabMemoisation[bufCle]..Vide ALORS
gtabMemoisation[bufCle] = ExécuteTraitement(sProcedureAppelée,trtProcedure,MesParamètres[2 À ])
FIN

// Résultat de la procédure.

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.

< Retour

Publier un commentaire : 
Votre adresse email ne sera pas publiée