Page 1 sur 1

[R] Mémoire qui ne se libère pas.

Posté : mar. 08 févr. 2011 11:37
par lokidor
Bonjour à tous,

J'ai un petit soucis par rapport à un programme que je doit reprendre et auquel il me faut ajouter un nouveau module (je n'ai pas développé moi même ni l'une ni l'autre des deux parties de code que je doit assembler).

jusque là j'ai réussi sans trop de mal, la doc autoIT étant assez complète, c'est allé presque tout seul.

Cependant, maintenant que j'ai mon interface bien en place, et qui se présente sous la forme de 5 onglets permettant différentes actions, lorsque je lance l'appli, pas de soucis, la RAM est à une dizaine de Méga et ça tourne nikel pour les 4 anciens modules. Sauf que, quand j'essaye d'aller sur l'onglet de la nouvelle fonction, d'un coup la ram utilisée monte progressivement vers 1 Go, puis attaque l'ascension vers les 2Go et se stabilise à un peu plus de 2.3Go. jusque là ça irait encore à peu près si en fermant le programme la mémoire était libérée. Or ce n'est pas le cas, même autoIT fermé, j'ai toujours plus de 2Go de RAM utilisée.

mes questions :

-en général, qu'est-ce qui peut prendre autant de ressource? un boucle mal conçue me suis-je dit, mais je n'ai rien trouvé de ce coté là....

-existe-t'il une astuce pour libérer la mémoire?

En espérant de vos réponses rapidement.

PS : le code est réparti en plein de petits fichiers, et vous le présenter la tout de suite n'aurait pas grand intéret, si vous en avez besoin faite moi signe :)

Re: [..] Mémoire qui ne se libère pas.

Posté : mar. 08 févr. 2011 14:39
par Yogui
sans avoir le code très compliqué de répondre en fait.

J'ai eu un problème similaire en chargeant un tableau avec une base de donnée ma requête n'était pas optimal et elle me retournait plus de ligne que besoin mais je ne comptait pas en Go non plus.

une variable mal déclarée qui s'ajoute à elle même plusieurs fois mais de la à arrivé au giga ça fait presque peur lol

petite astuce pour baisser la ram :

Code : Tout sélectionner

$pid = ProcessExists(@ScriptName)
_ReduceMemory($pid)

Func _ReduceMemory($i_PID = -1)
    If $i_PID <> -1 Then
        Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
        Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0])
        DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0])
    Else
        Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
    EndIf
    Return $ai_Return[0]
EndFunc   ;==>_ReduceMemory
 
Mais ce n'est pas une solution j'utilise ce bout de code pour faire baisser la consommation de firefox :roll:

Re: [..] Mémoire qui ne se libère pas.

Posté : mar. 08 févr. 2011 20:58
par Tlem
Ne pas oublier que _ReduceMemory est à lancer qu'une seule fois.

Ensuite, comme l'a dit Yogui, il va être difficile de vous aider sans avoir un aperçu de la fonction ou du code.