Comment faire en sorte que nos applications Delphi occupent moins de mémoire
Par Dany Leblanc le jeudi 2 juillet 2009, 10:31 - Delphi - Lien permanent
Je sais qu'à l'heure où la mémoire des ordinateurs individuels atteint couramment plusieurs Giga Octets, le débat de son économie semble dérisoire. Mais faisant partis de ceux qui ont connus des PC largement moins dotés de ce côté là, je ne peux jamais m'empêcher de prêter une attention particulière à ce problème. Et à ce sujet il existe un moyen tout simple de faire de l'économie de mémoire lorsque nos applications grossissent avec Delphi.
Comme vous le savez, Delphi est un langage objet, et tout objet doit être instancié avant d'être utilisé, voir détruit lorsqu'il n'y a pas de garbage collector, ce qui est le cas pour notre outil préféré. Et donc un formulaire Delphi est un objet qui doit être instancié. Hors justement nous ne nous occupons jamais de cela, faisant juste un show (ou showmodal) lorsque nous avons besoin de l'afficher. Ceci est possible car Delphi se charge d'instancier pour nous ces formulaires.C'est un principe très pratique mais qui présente un gros inconvénient : lorsque notre application grossit et possède de nombreux formulaires, tous sont instanciés en mémoire au début de l'application, alors qu'il n'est pas du tout certain que l'utilisateur les ouvrent réellement. Pour éviter cela, nous pouvons demander à Delphi de ne nous laisser gérer la vie de nos formulaires. Ouvrons les options de Delphi, rubrique "Options d'environnement / Concepteur VCL" :
Ici il suffit de décocher : "créer automatiquement fiches & modules de données". Une fois validé Delphi ne créera plus les nouveaux formulaires automatiquement. Il faudra donc faire attention à ce que le formulaire que l'on tente d'afficher existe bien.
Nous pouvons utiliser le constructeur standard avant le premier appel :
if not Assigned( Form2) then Form2 := TForm2.Create( Application); Form2.Show;
Encore mieux : pour les formulaires de type dialogue nous pouvons les détruire dès lors qu'ils ont été fermés par l'utilisateur :
Procedure AfficheDialogue; var wDialogue : TForm2; begin wDialogue := TForm2.Create( application); wDialogue.ShowModal; wDialogue.Free; end;
Ainsi notre formulaire occupe de l'espace mémoire uniquement lorsque l'utilisateur en a besoin.
Voici donc un petit tutoriel tout simple mais qui devrait permettre à votre application de grossir en fonctionnalitées sans pour autant exploser la mémoire de l'ordinateur.