Cette documentation explique le rôle du mot-clé LOCAL
dans le contexte de l’architecture MVP sous WinDev, notamment concernant le comportement de la liaison automatique et la gestion mémoire.
🧪 Test Comparatif : Avec et Sans LOCAL
Code utilisé
// Code de FEN_Unite
PROCÉDURE FEN_Unite(gpclPresentation est un PUnite dynamique <présentation> = Null)
MaFenêtre..ValeurRenvoyée = Faux
SI gpclPresentation = Null ALORS
gpclPresentation = PUnite.gNouvellePresentation()
FIN
// Code de test
pclModele est un MUnite dynamique = new MUnite
pclPresentation est un PUnite dynamique = new PUnite(pclModele)
Trace("AVANT")
Trace("Nom",gVersTexte(pclPresentation.p_sNomComplet))
Trace("Adresse mémoire modèle",&pclModele)
Trace("Adresse mémoire présentateur",&pclPresentation)
Ouvre(FEN_Unite, pclPresentation)
Trace("APRES")
Trace("Nom",gVersTexte(pclPresentation.p_sNomComplet))
Trace("Adresse mémoire modèle",&pclModele)
Trace("Adresse mémoire présentateur",&pclPresentation)
Résultat sans LOCAL
AVANT
Nom :
Adresse mémoire modèle : 2814818595968
Adresse mémoire présentateur : 2814819434672
APRES
Nom : TEST
Adresse mémoire modèle : 2814818595968
Adresse mémoire présentateur : 2814819434672
Nom :
Adresse mémoire modèle : 2814818595968
Adresse mémoire présentateur : 2814819434672
APRES
Nom : TEST
Adresse mémoire modèle : 2814818595968
Adresse mémoire présentateur : 2814819434672
Résultat avec LOCAL
PROCÉDURE FEN_Unite(LOCAL gpclPresentation est un PUnite dynamique <présentation> = Null)
AVANT
Nom :
Adresse mémoire modèle : 1667493780352
Adresse mémoire présentateur : 1667494671664
APRES
Nom : TEST
Adresse mémoire modèle : 1667493780352
Adresse mémoire présentateur : 1667494671664
Nom :
Adresse mémoire modèle : 1667493780352
Adresse mémoire présentateur : 1667494671664
APRES
Nom : TEST
Adresse mémoire modèle : 1667493780352
Adresse mémoire présentateur : 1667494671664
Tableau comparatif
Aspect | Sans LOCAL |
Avec LOCAL |
---|---|---|
Adresse mémoire identique | Oui | Oui |
Liaison automatique | ✔ Fonctionne | ✔ Fonctionne |
Effet de bord possible | Oui (si la variable globale est modifiée ailleurs) | Non (variable limitée à la procédure) |
🧠 Gestion de la Mémoire avec LOCAL
Le mot-clé LOCAL
ne libère pas directement la mémoire, mais il favorise une bonne gestion mémoire en limitant la durée de vie de la variable. Les objets dynamiques sont passés par référence, donc :
- Si
gpclPresentation
est local, la variable disparaît à la fermeture de la fenêtre. - Si aucun autre objet ne référence le présentateur ou le modèle, alors l’objet peut être libéré par le GC.
Comparaison d’impact mémoire
Scénario | Durée de vie de la variable | Objet libérable automatiquement ? |
---|---|---|
LOCAL gpclPresentation |
Jusqu’à fermeture de la fenêtre | Oui, si non utilisé ailleurs |
Variable globale | Durée de vie de la fenêtre, voire plus | Non, sauf nettoyage manuel |
Note : Bien que les adresses mémoire ne changent pas, utiliser
LOCAL
rend explicite la durée de vie de la variable, réduisant ainsi les risques de fuites mémoire dans des architectures complexes.
✅ Conclusion
L’utilisation de LOCAL
dans les fenêtres WinDev est une bonne pratique à la fois pour :
- Garantir le bon fonctionnement de la liaison automatique.
- Réduire les effets de bord.
- Faciliter la libération mémoire à la fermeture.