[R] Les fuites de mémoire en AutoIt

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Tetdoss
Niveau 3
Niveau 3
Messages : 39
Enregistré le : mar. 15 nov. 2011 23:23
Localisation : France 76
Status : Hors ligne

[R] Les fuites de mémoire en AutoIt

#1

Message par Tetdoss »

Salut à tous, je suis en train de découvrir ce merveilleux langage AutoIt et je me posais une question.

Y a-t-il des fuites de mémoire en AutoIt ? Car en fait je me demandais si c'était important de faire des _SoundClose ou encore des GUIDelete.
Selon moi, soit il faut penser à fermer ce que l'on a créé/ouvert préalablement ou alors ne rien faire car le langage est conçu pour ne pas faire manuellement les libérations de la mémoire.

Or dans tous les exemples que j'ai pu voir, on ne fait jamais de GUIDelete à la fin d'un programme GUI mais par contre on fait des _SoundClose :?: Alors dans quels cas il faut libérer la mémoire et dans quels cas il ne le faut pas ?

Est-il important de faire _SoundClose ou alors toutes les libérations sont faites automatiquement comme GUIDelete apparemment.

Voilà c'est tout, merci beaucoup d'avance :)
Modifié en dernier par Tetdoss le mer. 16 nov. 2011 12:29, modifié 1 fois.
Tetdoss
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..]Les fuites de mémoire en AutoIt

#2

Message par sylvanie »

Bonjour
Et bien oui, il faut toujours penser à la fermeture des handle ouverts le plus possible.
Pour les GUI, on est souvent paresseux (et je me compte dans le lot), car souvent on n'en gère qu'une (voire deux), et lors de la fermeture du programme l'OS se charge de faire le ménage sur tout ce qui n'a pas été libéré par l'exécutable (ce qui est vrai sur tout type d'allocation, donc y compris les adresse d'allocation des sons, des images, mémoire en générale).

Mais dans l'absolu, si on faisait un programme qu'on ne ferme jamais et qui créer des fenêtres (ou des sons comme évoqué dans ce post, ou des contôles ... ), sans les libérer quand on n'en a plus besoins alors ça s'accumule à tout va et on prends de la ram pour rien ...
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
Tetdoss
Niveau 3
Niveau 3
Messages : 39
Enregistré le : mar. 15 nov. 2011 23:23
Localisation : France 76
Status : Hors ligne

Re: [..]Les fuites de mémoire en AutoIt

#3

Message par Tetdoss »

Merci beaucoup de ta réponse très rapide sylvanie !

Donc OK je suis d'accord, il faut libérer quand on ne s'en sert plus mais si on s'en sert durant tout le programme jusqu'au Exit ? On peut laisser faire l'OS sans problème ?

Il ne peut pas rester des "résidus" de notre programme dans la RAM une fois le programme fermé ?
C'est surtout ça que je veux savoir car comme cela, si j'ai un programme avec seulement une GUI et un son (pendant tout le programme), je ne fais pas de GUIDelete ni de _SoundClose et si j'ai besoin de jouer un son seulement à un moment précis, alors là je penserais au _SoundClose.

Merci
Tetdoss
Avatar du membre
TT22
Membre émérite
Membre émérite
Messages : 1566
Enregistré le : lun. 18 avr. 2011 15:21
Localisation : La Quatrième Dimension
Status : Hors ligne

Re: [..]Les fuites de mémoire en AutoIt

#4

Message par TT22 »

Tetdoss a écrit :Il ne peut pas rester des "résidus" de notre programme dans la RAM une fois le programme fermé ?
Il est toujours possible qu'il en reste mais ce n'est pas très grave car la mémoire vive est vidée à chaque extinction du PC :wink:
Cordialement,
TT22
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..]Les fuites de mémoire en AutoIt

#5

Message par sylvanie »

Tetdoss a écrit : Il ne peut pas rester des "résidus" de notre programme dans la RAM une fois le programme fermé ?
Non car le l'OS gère qui à réservé quoi, et donc si le process s'arrête alors tout ce qui lui était alloué est rincé.
Par contre je déborde un peu du sujet qui est dédier RAM pour avertir tout de même sur les utilisation de process externe (lors d'appels à un autre exe ou une dll). Là par contre on peut parfois arriver à des problématique de process orphelins qu'on peut parfois anticipé en concentrant toute les fermeture depuis le script "Père" via OnAutoItExitRegister appelé dans presque tous les cas (sauf arrêts violents (fermeture forcées, arrêt électriques mais là on n'a plus de soucis de fuite :lol: ) ...)
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..]Les fuites de mémoire en AutoIt

#6

Message par sylvanie »

TT22 a écrit :
Tetdoss a écrit :Il ne peut pas rester des "résidus" de notre programme dans la RAM une fois le programme fermé ?
Il est toujours possible qu'il en reste mais ce n'est pas très grave car la mémoire vive est vidée à chaque extinction du PC :wink:
Hummm c'est quand que tu passes en programmation sur serveur ou sur embarqué ? :mrgreen:
En règle générale il faut toujours se dire que la machine peut tourner sans arrêt et ne pas miser sur son arrêt pour régler le problème.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
Tetdoss
Niveau 3
Niveau 3
Messages : 39
Enregistré le : mar. 15 nov. 2011 23:23
Localisation : France 76
Status : Hors ligne

Re: [..]Les fuites de mémoire en AutoIt

#7

Message par Tetdoss »

Parfait, merci tout le monde, je me posais la question car j'ai programmé plusieurs mois en C++ et il fallait toujours penser à libérer la mémoire avec les delete ! Les auteurs de tutoriels insistent en plus !
Ce que je ne comprends toujours pas car lorsque je regarde les performances du PC, avec ou sans delete, après la fermeture du programme, il y a toujours autant de mémoire vive libre.

Bref, je mets le [R] :D
Tetdoss
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..]Les fuites de mémoire en AutoIt

#8

Message par jchd »

Tetdoss a écrit :Parfait, merci tout le monde, je me posais la question car j'ai programmé plusieurs mois en C++ et il fallait toujours penser à libérer la mémoire avec les delete ! Les auteurs de tutoriels insistent en plus !
Ce que je ne comprends toujours pas car lorsque je regarde les performances du PC, avec ou sans delete, après la fermeture du programme, il y a toujours autant de mémoire vive libre.
Houlà, ce n'est pas pour la même raison, du tout. Quand on delete un _objet_ d'un langage OO, on invoque sa méthode delete, ce qui peut représenter un travail monstre, comme par exemple créer un fichier et écrire dedans deux tonnes d'infos vitales, imprimer la page de total d'un journal des ventes, mettre à jour une base de données, arrêter proprement une machine-outil, lancer un service, etc.

Tout ce travail doit être effectué dans un ordre bien précis qui correspond à une logique de fonctionnement que l'OS ne peut deviner et où il ne peut mettre ses gros sabots. Deleter un objet c'est donc invoquer une méthode éventuellement très complexe, puis libérer les ressources utilisées, ce qui peut signifier deleter des objets en cascade, etc. L'OS ne sait rien de tout ça : il déglingue tous les _blocs_ de mémoire alloués sans s'occuper de leur contenu et fait pareil pour les ressources, brutalement.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Tetdoss
Niveau 3
Niveau 3
Messages : 39
Enregistré le : mar. 15 nov. 2011 23:23
Localisation : France 76
Status : Hors ligne

Re: [R] Les fuites de mémoire en AutoIt

#9

Message par Tetdoss »

OK bien je comprends encore mieux maintenant, merci de l'info jchd
Tetdoss
Répondre