Accueil > Forum > > > > Comment optimiser la mémoire
Comment optimiser la mémoire
lundi 23 juin 2008 à 21:51:47 |
Comment optimiser la mémoire

jnmchl
|
Bonjour, J'ai une application qui semble nécessiter beaucoup de mémoire : je pense celà car chez moi j'ai 1Go de RAM et il tourne sans problème alors que au travail mes collègues qui n'ont que 256 Mo ça rame énormément. Alors plutôt que d'appeller au secours à tous vents, je me pose quelques questions où vous pourriez me donner votre avis ou conseils. Voilà ce que j'observe : * Mon appli fait 1,4 Mo fichier .exe c'est surtout parce qu'il y a beaucoup de form (une quizaine). Ces forms se chargent en mémoire alors que certaines ne sont utilisées que très rarement. Ne peut-on pas économiser cette mémoire en ne chargeant ces forms en mémoire qu'au moment de leur appel et peut-on restituer la mémoire après fermeture ? * L'appli utilise beaucoup de tableaux (array) la plupart sont dynamiques et ne servent que ponctuellement, est-ce qu'un setlength(MonTableau,0); suffit à libérer cette mémoire ? * Si j'en crois le gestionnaire de tâches : plus j'utilise mon appli et plus sa mémoire utilisée augmente : au démarrage : 7Mo puis ça peut monter progressivement jusqu'à 70Mo, si je réduis dans la barre des tâches 500ko seulement, si je réaggrandis je repars à 7Mo, y'a-t-il une fonction qui permette de revenir à 7Mo règulièrement ? Merci votre aide, et si vous pensez que je peux avoir d'autres gouffres à mémoire, merci d'émettre vos hypothèses. Jean-Michel
|
|
mardi 24 juin 2008 à 09:51:58 |
Re : Comment optimiser la mémoire

florenth
|
Réponse acceptée !
Salut ! Pour les forms chargées dynamiquement, tu peux les changer dans Projet>Options>Fiches. Il faut les changer de colonne pour qu'elles ne soient plus crées par Delphi (ça modifie en fait le code du .dpr) Après, pour t'en servir, tu peux faire : 1: si c'est une fiche modale : F := TMyModalForm.Create(nil); try F.ShowModal; // traitement des données reçues ici finally F.Free; end; 2: sinon: F := TMyForm.Create(Application); F.Show; et dans TMyForm tu mets dans l'évènement OnClose: Action := caFree; Pour les tableaux, normalement ça suffit. Tu peux aussi utiliser Finalize(Array). Pour l'histoire de la variation énorme de la consommation de mémoire: c'est que tu dois allouer pas mal de trucs que tu ne libères pas au moment opportun (voire que tu ne libères pas !). Exemple commun: les objets GDI comme GetDC qui doit être suivi d'un ReleaseDC,... De plus si tu réduits dnas la barre des tâches il n'est pa simpossible que Windows transfère la RAM dans la mémoire d'échange sur le disque dur, ce qui te donnerait l'impression que ton application consomme moins alors que ce n'est pas le cas. Sinon, tu peux utiliser MemCheck (google) pour vérifier qu'a la fermeture de ton application tu n'as pas oublié de libérer des variables, des objets. Si c'est le cas, une inspection minutieuse s'impose ! Voila, tu as déjà la base ici. A+ Flo Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.net [ Lien ]
|
|
vendredi 27 juin 2008 à 17:23:19 |
Re : Comment optimiser la mémoire

christophedlr
|
Pour compléter Florenth, pour les variables ce que tu peux faire suivant tes besoins bien sur, c'est en utiliser moins mais plus souvent.
Par exemple, si tu dois lire 4 informations différentes, si tu t'en sert de suite, au lieux d'allouer 4 variables, tu en alloue qu'une puis tu t'en sert, tu libère et alloue (ou realloue au lieu de libérer), puis tu t'en sert de nouveau pour une fois fini les 4 fois, la libérer.
Maintenant cela dépend des besoins, des fois on peut le faire des fois ce serait trop complexe de ne pas en utiliser plusieurs. Dans le cas où en utiliser qu'une plutôt que plus, cela réduit la mémoire utilisé vu qu'il faut allouer pour une seule, ensuite c'est toi qui alloue la taille requise et qui libère.
Par contre, effectivement comme dit Florenth, faut pas oublier de libérer quand tu t'en sert plus, cela réduit la RAM utilisé. Je te souhaite de réussir ton optimisation ;)
|
|
vendredi 27 juin 2008 à 17:28:50 |
Re : Comment optimiser la mémoire

florenth
|
"c'est en utiliser moins mais plus souvent." Je ne sais pas à quel type de variable tu fais allusion mais j'en profite pour poser une petite question: procedure Example; var X, Y, FileNumber, TileNumber: Integer; begin for X := 0 to [...] do Bla1(X); for Y := 0 to [...] do Bla2(Y); for FileNumber := 0 to [...] do Bla3(FileNumber); for TileNumber := 0 to [...] do Bla4(TileNumber); end; On voit bien que les 4 variables Integer ne servent pas toutes en même temps et qu'on pourrait n'en utiliser qu'une seule. Est-ce que pour autant il vaut mieux en déclarer une seule ? Réponse: non ! Car Delphi et son super compilateur remarque très bien qu'on n'utilise X uniquement à la première ligne, etc... Et il va en réalité allouer une seule variable ! C'es-y pas magique ça ? Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.net [ Lien ]
|
|
vendredi 27 juin 2008 à 17:31:26 |
Re : Comment optimiser la mémoire

florenth
|
Bon, j'ai oublié le point important de l'histoire: Tout ça fait gagner de la lisibilité au code et limite les bugs. En effet, quand on écrit TileNumber au lieu de I (nom courant de la variable de boucle) on sait exactement à quoi on fait référence. Voila, c'était le message du jour. [ Lien ]
|
|
samedi 28 juin 2008 à 11:02:16 |
Re : Comment optimiser la mémoire

jnmchl
|
Merci pour vos réponses qui contribuent et élargisse mon domaine de connaissance. Je vois en étudiant mon code que j'ai fais des erreurs de jeunesse (bien que je sois encore assez jeune ...). ex : je déclarais un string qui ne prenait qu'une valeur 'X' ou rien '' : pour fair des tests if s='X' then ... remplacé de fait par un booléen.
A ce sujet, si j'ai un ordre d'idée de la longueur d'une chaine entre 4 et 12 caractères, celà fait-il gagner de la mémoire (et/ou du temps) de déclarer s:string[12]; plutôt que s:string; ? (car sizeof ne me parait pas cohérent).
Mon thème est vaste ... merci pour les contributions.
Jean-Michel
|
|
samedi 28 juin 2008 à 11:14:57 |
Re : Comment optimiser la mémoire

christophedlr
|
Pour te répondre je serais tenté de dire que oui, dans certains langages (je sais pas si c'est le cas du Delphi), la variable quand elle est initialisé dans la mémoire, prend moins de place en définissant un nombre de cases maximum que ne rien spécifié, mais je n'en suis pas sur.
|
|
samedi 28 juin 2008 à 11:35:17 |
Re : Comment optimiser la mémoire

florenth
|
Mouais, ça dépend. Les strings, c'est très spécial - ça doit bien être le type le plus difficile à maîtriser.
Pour ma part, je dirai que "string" tout court convient à peu près partout. Sa taille est automatiquement ajustée, les copies (S2 := S1) ne sont que des copies de pointeur, infiniment plus rapide que si S1 et S2 étaient de string[12].
Par contre, si tu sais calculer la taille que doit faire ta chaîne pour lui faire un traitement, il vaut mieux allouer d'un coup la mémoire.
Exemple:
function MyUpperCase(const S: string): string; var I: Integer; begin for I := 1 to Length(S) do Result := Result + UpCase(S[I]); end;
est infiniment plus lent que :
function MyUpperCase(const S: string): string; var I: Integer; begin SetLength(Result, Length(S)); for I := 1 to Length(S) do Result[I] := UpCase(S[I]); end;
Et c'est logique, car l'opérateur "+" (concaténation de chaînes) est très gourmand en temps et en mémoire ! Mais très pratique aussi dans certaines circonstances.
Bref, faut bien comprendre les rouages internes et surtout, tester et retester...
|
|
Cette discussion est classée dans : appli, mo, mémoire, optimiser, 7mo
Répondre à ce message
Sujets en rapport avec ce message
Libération de la mémoire [ par Gerard ]
Bonjour, J'ai une petite application (O,5 Mo)qui lance de façon planifiée d'autres applications au travers de l'API shellexecute. Cela fait monter la
Décharger une DLL de la mémoire [ par EricDD ]
Bonjour,Je travaille avec une appli ecommerce en asp, qui fait appel à une DLL Delphi, enregistrée comme composant COM+ : Je n'ai pas d'exe.Je suis a
exécuter 2 appli console en mm tps [ par mounjetado ]
bonjour,j'ai deux appli console que je souhaite faire communiquer via des événements (mais si vous avez mieux à me proposer...), pour accéder tour à t
partager de la mémoire [ par mounjetado ]
bonjour,existe-t-il un cours complet et détaillé, avec des exemples, sur l'utilisation des objets de synchronisation , tels que mutex, sémaphores, sec
Caractère Arabe [ par nci ]
Bonjour Tt le monde,Je developpe une Appli avec Delphi 2005 + SQL Serveur 2000. Certaines de mes tables contiennent des caractères arabes.Dans SQL ser
Lecture et écriture en mémoire [ par PHIL63 ]
Bonjour à tous et à toutes,Mon souci :J'ai des adresses mémoire pour un logiciel donné et j'aurais besoin d'accèder directement à ces zones mémoire en
Acces directe à la mémoire d'une carte SD [ par godardth ]
Bonjour,Voici mon problème : je développe une petite application electronique qui utilise une carte SD pour stocker un fichier son (format wave). Ce f
vista - controle d'utilisateur [ par simonpelloquin ]
Bonjour,Sur Vista, je rencontre des problèmes avec une appli programmée sous delphi5. Le problème est lié à la fonctionnalité de contrôle de compte ut
Lire du HTML dans une appli console [ par XBOX116_4ever ]
Serait-il possible de pouvoir lire du HTML à partir d'un programme console. En fait, sur mon serveur, une application me retourne une page blanche ave
Redemmarer mon application automatiquement [ par BernieNoel68 ]
Bonjour a tous, Je suis a la recherche d'une solution permettant à mon application de s'arreter et de se relancer automatiquement.En gros j'ai une app
Livres en rapport
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|