Page 1 sur 1

[Func] _ReduceMemory

Posté : mar. 17 juil. 2012 10:48
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.

Re: [Func] _ReduceMemory

Posté : mar. 17 juil. 2012 12:07
par Uranium
Merci du partage !

Re: [Func] _ReduceMemory

Posté : mar. 17 juil. 2012 14:25
par mikell
Il y a un script-exemple d'application assez sympa ici (entre autres)
http://www.autoitscript.com/forum/topic/107437-rampro/

Re: [Func] _ReduceMemory

Posté : ven. 03 août 2012 12:02
par Bubule
Vraiment super ! Merci beaucoup !
Il marche très bien et m'est très utile !!!

Re: [Func] _ReduceMemory

Posté : sam. 02 nov. 2013 12:44
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 ;)

Re: [Func] _ReduceMemory

Posté : sam. 02 nov. 2013 13:02
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.

Re: [Func] _ReduceMemory

Posté : sam. 02 nov. 2013 20:21
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.

Re: [Func] _ReduceMemory

Posté : sam. 02 nov. 2013 21:56
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.

Re: [Func] _ReduceMemory

Posté : sam. 02 nov. 2013 23:12
par julie
ok merci beaucoup pour toute c'est indications je ne pense pas finalement en avoir l'utilité :wink: