Tdatamodule pour optimiser l'espace mémoire occupée...

Soyez le premier à donner votre avis sur cette source.

Vue 4 967 fois - Téléchargée 412 fois

Description

...et accélérer le démarrage de l'application par la même occasion.
Le principe repose sur l'utilisation du compo TDataModule. Conçu pour l'accès aux bases de données, TDataModule ressemble à une Form ne pouvant recevoir que des compos non visuels (comme TImageList) et pouvant contenir le code associé. Il peut aussi contenir du code rarement utilisé par l'application afin d'alléger le code de celle-ci Il présente l'avantage de pouvoir être appelé dynamiquement par l'application, quand c'est nécessaire, et libéré aussitôt son travail terminé.
La mise en oeuvre est très simple. Créer une nouvelle application puis:
- Fichier | Nouveau | Module de données
DataModule2 apparait, comme une Form, et accepte n'importe quel compo non visuel. Le code associé est à mettre dans l'Unit2.
Il faut maintenant interdire la création automatique de la fiche DataModule2 au lancement ainsi:
- Projet | Options... | Fiches
...et balancer DataModule2 dans "Fiches disponibles".
(Ne pas oublier de mettre Unit2 dans les "uses" de l'unit1)

Source / Exemple :


//Quand l'application a besoin des sevices de DataModule2:
procedure AppelModule2;
begin
  if DataModule2=nil then Application.CreateForm(TDataModule2,DataModule2);
try
  // traitement...
  //Par exemple:
  Unit2.DataModule2.ImageList1.GetBitmap(0,Form1.Image1.Picture.Bitmap);
finally
  DataModule2 := nil;
  unit2.DataModule2.Free;
end;
end;

Conclusion :


Il existe aussi une autre utilisation de TDataModule qui permet de créer des .exe sans aucune fiche. Créer une nouvelle application. Fermer la nouvelle fiche et la nouvelle unité sans enregistrer, puis:
- Fichier | Nouveau | Module de données

Voilà. Cela s'adresse aux débutants, dont je suis ;)
Bonne prog à tous!

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
Tu as raison, MAURICIO. Le système garde quelque chose en mémoire. Mais pas dans la RAM. La RAM est bien libérée. En fait, il reste juste des trucs dans la mémoire cache. C'est pour cela que ce "souvenir" disparait au fil des calculs de proc ou après le lancement d'une grosse application.
Kernel s'occupe bien de la RAM. Il libère bien la RAM pour qu'il n'y ait pas de conflit. Mais pourquoi le gestionnaire des tâches ne le confirme pas. Mystère...
Messages postés
1106
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
22
Pas du tout mécontent de vous avoir croisés...

En effet, ~.Free avec les BMP est très ennuyeux car Create et Free répétés finissent par submerger le swap et à faire ramer l'application terriblement. J'ai tjs rusé: je partage les ressources au lieu de les créer et les détruire. Ainsi, dans un composant, si j'ai besoin d'un bitmap, je crée un TBitmap une fois pour toute et qui subit toutes les tortures inimaginables et rend l'âme après clic sur la croix.

Pour illustrer que Windows garde tout bien en mémoire et pour quantifier le commentaire très juste d'Emandhal, allez voir le code source 28071 et vous verrez comme la garde en mémoire accélère énormément les processus (gain par 10 presque).

Même si ~.Free libère de la RAM, je dis qu'il en reste encore un peu. Le seul moyen de tout bien vider est de quitter l'application, d'attendre 2 minutes etde recommencer. Kernel doit avoir son mot à dire ici...
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
oula, admettons ke excel (ke j ene possede pas) prenne 15ko de memoire à l'ouverte, on le ferme et windows en garde 3ko. je fais idem avec 50 applications différentes, j'espere kil ne vas pas me gruger 150ko pour rien qd meme !
je pense ke windows garde en souvenir les dernieres applis ouvertes pour les ouvrir plus vite et aussi les applications les plus utilisées. leur "place" physique sur le disque a aussi une incidence, c pourquoi un defrag ça fé du bien :D et windows sais placer/deplacer les applis les plus lancées ds les secteurs les plus "habiles" a etre utilisés rapidement.

une fois de plus c ma théorie et peut etre une utopie !
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Dans un certains sens je suis d' accord avec toi Emandhal, par exemple si tu ouvres Excel et que tu le fermes, et tu l' ouvres une nouvelle fois, et bien cette dernière s' ouvrira plus vite !!!
Donc, c' est clair que le système garde quelques chose en mémoire. Si c' est parce que Excel ne libère pas toute la mémoire utilisée exprès au cas où on ouvrirait une nouvelle instance de Excel ou si c parce que Windows reconnait une demande de mise en mémoire qu' elle a déjà en mémoire, et donc, pas besoin de recharger en mémoire ???!!!??? et bien j' en ai aucune idée, d' ailleurs c peut être les 2 !!!
Messages postés
194
Date d'inscription
dimanche 2 mars 2003
Statut
Membre
Dernière intervention
10 octobre 2006
2
j'ai envie d'exposer ma théorie (ce n'est qu'une théorie) :

je pense que windows garde volontairement la réservation de mémoire pour éviter de la réallouer (ui je sais je suis chiant avec ca mais plein de programmeurs m'ont dit que les réallocations ralentissent tout alors...), pour que comme ça à la création d'une fiche, la même par exemple, celà se fasse rapidement.

J'ai aussi remarqué que lors d'une réduction de la fenêtre dans la barre des taches, la mémoire utilisée baissait donc je suppose que windows suppose que l'application sera là pendant un petit moment et donc pas besoin qu'elle utilise plus de mémoire.

voilà ma petite théorie ^^
Afficher les 16 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.