[Func] _ReduceMemory

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

[Func] _ReduceMemory

#1

Message par timmalos »

Bonjour à tous, je partage avec vous une information utile trouvée sur le forum anglais, qui permet de libérer la mémoire non utilisée des programmes dont vous connaissez le PID.


Par exemple, l'exemple suivant libère purement et simplement la moitié de la mémoire sur un de mes serveurs en une seule utilisation et est très utile quand vous avez des applis lourdes mal concues qui tournent en tâche de fond.

Code : Tout sélectionner

$list = ProcessList()
for $i = 1 to $list[0][0]
  _ReduceMemory($list[$i][1])
next




Func _ReduceMemory($PID)
    Local $dll = DllOpen("kernel32.dll")
    Local $ai_Handle = DllCall($dll, 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $PID)
    Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0])
    DllCall($dll, 'int', 'CloseHandle', 'int', $ai_Handle[0])
    DllClose($dll)
    Return $ai_Return[0]
EndFunc

Cette fonction peut egalement être utilisée en une seule ligne dans votre code, par exemple après la création de votre GUI ou même dans une boucle infinie si vous faites beaucoup d'actions.

Code : Tout sélectionner

DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
Avec AutoIt elle est assez efficace un script de 13Mo passe à 3Mo chez moi.
Avatar du membre
Uranium
Niveau 5
Niveau 5
Messages : 143
Enregistré le : mer. 28 mars 2012 13:13
Status : Hors ligne

Re: [Func] _ReduceMemory

#2

Message par Uranium »

Merci du partage !
« En mathématiques, “évident” est le mot le plus dangereux. »
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [Func] _ReduceMemory

#3

Message par mikell »

Il y a un script-exemple d'application assez sympa ici (entre autres)
http://www.autoitscript.com/forum/topic/107437-rampro/
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Bubule
Niveau 4
Niveau 4
Messages : 55
Enregistré le : mer. 27 mai 2009 11:40
Status : Hors ligne

Re: [Func] _ReduceMemory

#4

Message par Bubule »

Vraiment super ! Merci beaucoup !
Il marche très bien et m'est très utile !!!
Avatar du membre
julie
Niveau 5
Niveau 5
Messages : 128
Enregistré le : sam. 28 janv. 2012 17:28
Status : Hors ligne

Re: [Func] _ReduceMemory

#5

Message par julie »

Bonjour a tous :-)
Je viens de tomber sur ce post très intéressant
Mais je voulais savoir quand on ajoute la ligne
Dllcall(...)
Que ce passe t'il dans le pc pour pouvoir réduire a ce point la la mémoire je suis bluffer merci pour vos reponse ;)
Avatar du membre
FireFox
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 217
Enregistré le : dim. 14 oct. 2012 01:30
Localisation : Picardie/Île-de-France, France
Status : Hors ligne

Re: [Func] _ReduceMemory

#6

Message par FireFox »

julie a écrit :Bonjour a tous :-)
Je viens de tomber sur ce post très intéressant
Mais je voulais savoir quand on ajoute la ligne
Dllcall(...)
Que ce passe t'il dans le pc pour pouvoir réduire a ce point la la mémoire je suis bluffer merci pour vos reponse ;)
Tout est expliqué ici :
http://msdn.microsoft.com/en-us/library ... s.85).aspx

En clair, la mémoire "vidée" est toujours dans la ram ou dans le fichier de paginage donc inutile de se servir de la fonction si on en a pas l'intérêt.

Et rien à voir directement avec la fonction DllCall mais plutôt la function DLL EmptyWorkingSet qui est appelée.

Cdlt, FireFox.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [Func] _ReduceMemory

#7

Message par timmalos »

Firefox, peux tu me confirmer qu'elle est quand même utile en cas de fuite mémoire sur un programme?
Car si le programme a juste oublié de fermer une ressource ou autre la page n'est en réalité plus utilisée et EmptyWorkingSet permettra qu'un autre programme la réalloue, et pour certains serveurs avec peu de mémoire vive c'est parfois utile de récupérer un bon nombre de pages.
Avatar du membre
FireFox
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 217
Enregistré le : dim. 14 oct. 2012 01:30
Localisation : Picardie/Île-de-France, France
Status : Hors ligne

Re: [Func] _ReduceMemory

#8

Message par FireFox »

Je laisserai le système s'occuper du problème, car s'il y-a besoin de vider/réduire la taille de l'espace du travail pour un/des processus il le fera.

De plus, la fonction créé des défauts de page puisqu'on a vidé la mémoire et que le processus ne peut plus y accéder.

Cdlt, FireFox.
Avatar du membre
julie
Niveau 5
Niveau 5
Messages : 128
Enregistré le : sam. 28 janv. 2012 17:28
Status : Hors ligne

Re: [Func] _ReduceMemory

#9

Message par julie »

ok merci beaucoup pour toute c'est indications je ne pense pas finalement en avoir l'utilité :wink:
Répondre