...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!
27 déc. 2004 à 18:00
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...
19 déc. 2004 à 10:55
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...
16 déc. 2004 à 12:13
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 !
16 déc. 2004 à 12:06
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 !!!
16 déc. 2004 à 11:04
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 ^^
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.