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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
lokidor
Niveau 3
Niveau 3
Messages : 36
Enregistré le : mar. 08 févr. 2011 10:57
Localisation : Sophia Antipolis
Status : Hors ligne

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

#1

Message 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 :)
Modifié en dernier par lokidor le mer. 16 févr. 2011 13:06, modifié 1 fois.
Loki,

Le monde avance grâce aux paresseux!
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

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

#2

Message 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:
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#3

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre