Page 1 sur 1

[R] while qui monte en charge mémoire en continu

Posté : lun. 16 févr. 2015 16:41
par Fontainard
Bonjour,
Je vous fais partager mon code non abouti, il regarde dans un fichier texte s'il existe des dédoublement de chaine de caractères, en parallèle il regarde dans un répertoires s'il y a plus de 20 fichiers.
Dans un des cas, ou des deux... il envoie un mail toutes les 20 minutes tant que les conditions sont remplies.
Sinon, il vérifie toutes les minutes si tout vas bien.
► Afficher le texte
Je débute sur Autoit, mon code peut s'avérer peu pertinent. Quoi qu'il en soit, tout fonctionne, sauf le bouton pause, et la croix rouge pour quitter lorsque la boucle est lancée avec la case "surveiller". Mais surtout, ce qui pose problème c'est que c'est un programme qui est sensé tourner en continu, et donc, dans mon gestionnaire de tâche il prend de plus en plus de mémoire à l'infini, chose assez problématique.

Je suis quoiqu'il en soit ravis de rejoindre votre communauté, en vous remerciant par avance pour votre aide !

Re: [..] while qui monte en charge mémoire en continu

Posté : lun. 16 févr. 2015 16:43
par timmalos
Très certainement vos FileOpen() non suivi d'un FileClose() et le fait que vous declariez moulte variables dans une boucle infinie au lieu de les déclarer avant.

Bref, un code plutôt moche :wink: que je n'ai pas le temps de reprendre entièrement mais je ne doute pas que des âmes aimables vous viendront en aide dans la soirée

Re: [..] while qui monte en charge mémoire en continu

Posté : lun. 16 févr. 2015 17:41
par Fontainard
Merci pour ta réponse camarade.

Première optimisation en rajoutant le fileclose et en mettant les variables avant mon while. éh ouais, ça va déjà beaucoup mieux it's a piece of cake (a), merci !
► Afficher le texte
Plus qu'a régler le problème des boutons du coup :)
N'hésitez pas si vous avez quelque chose à rajouter ^^

Re: [..] while qui monte en charge mémoire en continu

Posté : lun. 16 févr. 2015 19:25
par TommyDDR
Ce qui suit ne résoudra pas votre problème mais vous aidera à y voir plus clair.

Je vous conseille fortement de diminuer la complexité cyclomatique (ça c'est placé ^^) de votre script.
Cad : Essayez de découper votre long script en plusieurs fonctions et appels de fonctions.
Renseignez vous aussi sur le mode événementiel des GUI en Autoit -> Opt("GUIOnEventMode", 1)
Votre code sera plus clair, vous vous y retrouverez mieux et vous verrez plus facilement ce qui ne va pas.

Re: [..] while qui monte en charge mémoire en continu

Posté : ven. 20 févr. 2015 11:24
par Fontainard
Bonjour, désolé pour la latence au niveau de ma réponse.
En suivant vos conseils (dont je vous remercie), j'ai essayé de simplifier le code, mais le problème de monté de charge est récurrent. J'ai l'impression d'avoir tout retourné dans tous les sens, j'avais fait un if au lieu d'un while en rappelant une fonction, un sleep, un AdlibRegister un timer... bref tout avait fonctionné mais avec une montée en charge perpétuelle.

Pourquoi nous fait-il ça ? ;)

J'ai rajouté des fonctionnalités une permet de visualiser une autre chaine de caractère, et une autre méthode que j'ai récupéré pour spécifier le contenu d'un répertoire.


EDIT: voilà mon code actuel.
► Afficher le texte


Merci pour votre aide !

Re: [..] while qui monte en charge mémoire en continu

Posté : ven. 20 févr. 2015 13:21
par Oversid3
Ça ne résoudra pas tout les problèmes du code mais déjà :

Code : Tout sélectionner

Func _ReduceMemory()
    Local $aReturn = DllCall("psapi.dll", "int", "EmptyWorkingSet", "long", -1)
    If @error = 1 Then
        Return SetError(1, 0, 0)
    EndIf
    Return $aReturn[0]
EndFunc   ;==>_ReduceMemory
 
A appeler a la fin de chaque boucle pour reduire la conso.

Re: [..] while qui monte en charge mémoire en continu

Posté : ven. 20 févr. 2015 18:11
par orax
FileClose est mal utilisé. Cette fonction attend un handle retourné par FileOpen mais pas un nom de fichier.

Code : Tout sélectionner

FileClose($Fichier)

Re: [..] while qui monte en charge mémoire en continu

Posté : lun. 23 févr. 2015 13:54
par Fontainard
C'était bien ça le problème, merci pour votre contribution !

Re: [R] while qui monte en charge mémoire en continu

Posté : mar. 24 févr. 2015 11:04
par timmalos
La fonction _ReduceMemory() n'est absolument pas à utiliser dans ce genre de problème, c'est vraiment idiot !
Corrigez votre code et laissez Windows gérer sa mémoire, au lieu de vouloir rajouter une fonction qui va faire office de ramasse miette alors qu'elle n'est pas concue pour ca !

C'est un peu comme si vous vouliez conduire une voiture, au lieu de passer le permis et savoir conduire correctement (Ou encore faire un code propre), vous prenez le volant, cassez tout sur votre passage, tuez 2/3 personnes pour la forme, et de temps en temps un coup d'essui-glace pour nettoyer le sang.