Pour ne pas perdre la mémoire, mangez du poisson !

Le problème des programmes c'est qu'il est compliqué de leur faire ingurgiter des Omega 3 (même avec Delphi qui reste assez ouvert sur l'extérieur) en provenance directe de la mer. Du coup il faut rester inventif ou en ce qui concerne les fuites de mémoires attentif à ce que l'on fait.

En bon développeur, ARC activé ou pas, il faut libérer la mémoire que l'on alloue. Il faut donc systématiquement faire des Free() ou FreeAndNil() des classes que l'on instancie lorsqu'elles ne sont pas ajoutées directement à une arborescence autodétruite (comme les fiches et leurs composants).

Le problème c'est qu'avec la complexité de certains programmes il est possible de laisser passer quelques petites choses involontairement.

En utilisation classique ça pose peu de problèmes vues les configurations des ordinateurs modernes. Cependant, sur une application allumée en permanence ou très sollicitée il est important de s'assurer qu'il n'y a pas de fuites. Pour cela je vous recommande d'activer la log en sortie de programme sous forme de fenêtre de dialogue. Il suffit d'avoir ces trois lignes quelque part dans le code (soit du projet, soit en initialisation d'une unité).

{$IFDEF DEBUG}
ReportMemoryLeaksOnShutdown := true;
{$ENDIF}

Bien entendu je l'ai conditionné à la configuration de débogage histoire que ça n'apparaisse pas en production. Ca fait toujours tâche de montrer à l'utilisateur final qu'on a quelques erreurs dans le programme. L'essentiel doit rester invisible pour ses yeux !

Grâce à l'activation de cette variable globale, le programme affichera une fenêtre avec la liste des objets non libérés lors de la fermeture du programme.

Ceci ne fonctionnant pas en environnement avec ARC car celui-ci utilise le garbage collector et donc les fuites de mémoire ne sont pas sensées se produire... et je dis bien "pas sensées".


A lire aussi

Pour ne pas perdre la mémoire, mangez du poisson ! (03/03/2019)
Modification corrective de l'assistant split() sur les chaînes de caractères sous Delphi 10.3 Rio (23/01/2019)
Les variables inline, quoi qu'est-ce ? (09/11/2018)
On a enfin eu la peau de l'ARC sur les objets !!! (29/10/2018)
Jouons un peu avec les types énumérés et leurs valeurs (05/12/2017)
Simplifier le passage de listes en paramètres et leur création (24/07/2017)

Membre du programme MVP.
Membre du programme MVP