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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Fontainard
Niveau 1
Niveau 1
Messages : 4
Enregistré le : lun. 16 févr. 2015 15:33
Status : Hors ligne

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

#1

Message 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 !
Modifié en dernier par Fontainard le lun. 23 févr. 2015 13:55, modifié 1 fois.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#2

Message 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
Fontainard
Niveau 1
Niveau 1
Messages : 4
Enregistré le : lun. 16 févr. 2015 15:33
Status : Hors ligne

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

#3

Message 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 ^^
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2127
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#4

Message 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.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Fontainard
Niveau 1
Niveau 1
Messages : 4
Enregistré le : lun. 16 févr. 2015 15:33
Status : Hors ligne

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

#5

Message 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 !
Oversid3
Niveau 3
Niveau 3
Messages : 45
Enregistré le : jeu. 29 janv. 2015 11:20
Status : Hors ligne

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

#6

Message 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.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

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

#7

Message 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)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Fontainard
Niveau 1
Niveau 1
Messages : 4
Enregistré le : lun. 16 févr. 2015 15:33
Status : Hors ligne

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

#8

Message par Fontainard »

C'était bien ça le problème, merci pour votre contribution !
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#9

Message 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.
Répondre