[R] Utilisation de RAM trop importante

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Faco
Niveau 4
Niveau 4
Messages : 80
Enregistré le : lun. 29 juil. 2013 18:09
Status : Hors ligne

[R] Utilisation de RAM trop importante

#1

Message par Faco »

Bonjour all,

je me suis fais un script avec GUI pour gérer mais différents parc informatique qui fonctionne bien et n'utilise pas grand chose en RAM (5-7 Mo) quand je l'utilise.
Mon soucis c'est que si j'oublie de le refermer quand je pars et que je reviens 1 ou 2 semaines après, il frôle le giga en RAM ( 600-800 Mo).

J'aurai aimé savoir si vous connaitriez un moyen d'identifier les problèmes ou des bonne pratique pour libérer les ressources.

je dois avoir des fileopen sans fileclose,...., des truc dans le genre et j'aurais aimé identifier les fonctions à risques.

dans mon code :
1-Gui : boutons, tabs, Menu, edittext, listviews + menucontextuel
2-Script : INIread/iniwrite, Run/runwait, fileopen/fileclose
3-Et surtout (d'où viens certainement le prob) : une fonction "refresh" dans laquelle je recharge mon listeview principal et lance une commande avec Run.

J'ai toujours la possibilité d’arrêter le programme au bout d'une heure d'inactivité mais je préférerai nettoyer mon code.

(le temps d'écrire le message, mon programme est passer de 6.5 Mo à 14.4 Mo)

Merci :-)
Modifié en dernier par Faco le jeu. 15 janv. 2015 09:34, modifié 1 fois.
Y01
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 17 nov. 2014 10:46
Status : Hors ligne

Re: [..] Utilisation de RAM trop importante

#2

Message par Y01 »

Bonjour,

Peut être qu'avec le code, il serait plus simple de voir ce qui ne va pas.
Y01
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Utilisation de RAM trop importante

#3

Message par jguinch »

C'est compliqué de répondre sans voir le script...
Qu'est censé faire ton script ?
Utilises-tu des tableaux (array) ?

Le FileClose n'est pas obligatoire mais conseillé, c'est une bonne pratique.
(edit : tu dois l'utiliser si tu ré-ouvres le fichier plusieurs fois)
Si la RAM évolue de cette façon, c'est que certaines variables accumulent des données.

Si tu as des variables qui stockent beaucoup d'informations, il faut réfléchir à une manière d'optimiser ça :
- est-ce que tu as besoin des données en permanence dans ton script ?
- est-ce que tu peux externaliser les données (base de donnée ou fichier texte/ini)

Une bonne pratique est de "vider" les variables qui utilisent de la mémoire si tu ne t'en sert plus. Par exemple, si tu as une variable qui contient l'intégralité d'un fichier de plusieurs Mo, il faut penser à vider la variable si tu n'a pas besoin d'y accéder régulièrement dans ton script (quitte à relire le fichier - ce qui est rapide).
Pour vider une variable, il suffit de lui attribuer une valeur vide.

Voilà, un peu en vrac quelques idées...
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Utilisation de RAM trop importante

#4

Message par mikell »

Peut-être aussi des lancements successifs de Run (tester avec RunWait serait concluant)
" 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
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Utilisation de RAM trop importante

#5

Message par orax »

jguinch a écrit :Une bonne pratique est de "vider" les variables qui utilisent de la mémoire si tu ne t'en sert plus.
1. Mais comment les "vider" ? Il semble qu'il y ait quelques subtilités.
Dans cet exemple, je lis un fichier de 100 Mo. Je pensais que "vider" $f avec $f = "" était suffisant mais apparemment non puisque la mémoire utilisée ne redescend pas ("working set" = 283 Mo après lecture du fichier).
► Afficher le texte
2. L'utilisation de ByRef (Par Référence) pourrait être intéressante dans certains cas (si les variables à passer sont volumineuses).
Toutefois, j'ai fait des essais avec et sans "ByRef" mais je n'ai pas vu de différence concernant la consommation mémoire.

3. Les variables locales, à l'intérieur d'une fonction, seront automatiquement vidées lorsque la fonction est terminée.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Utilisation de RAM trop importante

#6

Message par jguinch »

Dans l'aide, section Keyword Reference, il est expliqué comment vider un tableau en affectant la valeur 0 à celui-ci.
C'est aussi vrai pour les autres variables. (j'avais en tête qu'il fallait mettre une valeur vide "" mais c'était 0 :wink: )
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Faco
Niveau 4
Niveau 4
Messages : 80
Enregistré le : lun. 29 juil. 2013 18:09
Status : Hors ligne

Re: [..] Utilisation de RAM trop importante

#7

Message par Faco »

Oki merci pour les pistes, je vais m’atteler au nettoyage.
Répondre