Le script mentionné plus haut dans le fil de discussion est l'EA complet (ForumQuestion1.mq5), c'est ce qui fait monter la mémoire. Il n'y a pas d'autres actions dans l'EA.
Veuillez consulter le document Word ci-joint. Il s'agit d'une instance de Windows Server 2012 R2 exécutée dans Windows Azure. C'est une nouvelle machine (donc pas de logiciel bizarre ou autre) et elle fonctionne dans le centre de données d'Europe occidentale.
L'augmentation de la mémoire d'utilisation au fil du temps se produit également ici lors de l'exécution du script ForumQuestion1.mq5 (de plus tôt dans le fil).
Voici une répartition de l'augmentation dans le temps, de 8 h 40 à 14 h 05, le volume est passé de 74,1 Mo à 379,9 Mo.
J'ai trouvé un moyen de contourner le problème... ce n'est pas joli mais ça marche.
Solution : Exécutez un script PowerShell qui vérifie la mémoire. Lorsqu'elle dépasse 60%, il redémarre MetaTrader.
Le script est ci-dessous, je suis en train de le tester.
Etapes :
Cliquez sur Démarrer sur Windows
Tapez "PowerShell ISE".
Coupez et collez le script ci-dessous dans l'éditeur de texte.
Appuyez sur play (ou enregistrez le fichier PS1 et exécutez-le à partir de l'invite de commande, mais je suis toujours en train de le tester, donc je l'exécute à partir de PowerShell ISE pour le moment).
Le script ci-dessous redémarre Metatrader (terminal64) si la mémoire dépasse 300 Mo (selon la colonne de la mémoire dans votre gestionnaire de tâches) :
#################################################################
strict-mode
cls
$memoryThresholdInKiloBytes = 300000
$cooldownSeconds = 30
$loopPauseInSeconds = 30
$counter = 0
while($true){
if($counter -gt 1000){
cls
}
#write-host "$(get-date) Checking memory in use... counter=$counter"
$processPrivateSet = Get-Counter "\Process(terminal64)\Working Set - Private"
$wsPrivateKiloBytes = $processPrivateSet.CounterSamples[0].CookedValue / 1KB
$memoryLabel = $wsPrivateKiloBytes.ToString('## ### ###') + " K"
write-host "$(get-date) Kilo Bytes in use $memoryLabel"
if($wsPrivateKiloBytes -gt $memoryThresholdInKiloBytes){
write-host "$(get-date) Over threshold of $memoryLabel closing metatrader"
# Close metatrader (terminal64)
Get-Process terminal64 | Foreach-Object {
$_.CloseMainWindow() | Out-Null
} | stop-process –force
# Give time to shutdown
write-host "$(get-date) Shutting down cooldown of $cooldownSeconds seconds #####################"
start-sleep -Seconds $cooldownSeconds
# Open metatrader
write-host "$(get-date) Opening metatrader again and wait $cooldownSeconds seconds"
&"C:\Program Files\MetaTrader 5\terminal64.exe"
start-sleep $cooldownSeconds
}
start-sleep -Seconds $loopPauseInSeconds
$counter = $counter + 1;
}
# Links
# http://stackoverflow.com/questions/33344611/get-memory-private-working-set-of-process
Je l'ai mis sur Windows Server 12 R2 et cela augmente également la mémoire.
Je vais surveiller cela pendant un certain temps et donner un retour d'information sur ce fil.
Il est actuellement de 650 Mb
Je n'ai rien changé, je l'ai juste laissé tourner.
Merci pour les commentaires.
Je pense que je vais passer à Windows 10 et voir si cela fait une différence.
Le script mentionné plus haut dans le fil de discussion est l'EA complet (ForumQuestion1.mq5), c'est ce qui fait monter la mémoire. Il n'y a pas d'autres actions dans l'EA.
Aucun contrôle graphique.
Bonjour Alain,
Veuillez consulter le document Word ci-joint. Il s'agit d'une instance de Windows Server 2012 R2 exécutée dans Windows Azure. C'est une nouvelle machine (donc pas de logiciel bizarre ou autre) et elle fonctionne dans le centre de données d'Europe occidentale.
L'augmentation de la mémoire d'utilisation au fil du temps se produit également ici lors de l'exécution du script ForumQuestion1.mq5 (de plus tôt dans le fil).
Voici une répartition de l'augmentation dans le temps, de 8 h 40 à 14 h 05, le volume est passé de 74,1 Mo à 379,9 Mo.
8:40 am
74.1 MB
Je viens de lancer ForumQuestion1 EA
9:53 am
281.6 MB
10h30 du matin
297.2 MB
11 h 23
319.3 MB
12 h 23
343.5 MB
13:00 pm
369.1 MB
14:05 PM
379.9 MB
Je pense que c'est normal. Mon MT4 est sur 1GB ram maintenant.
Ce sujet concerne MT5 Daniela.
Solution : Exécutez un script PowerShell qui vérifie la mémoire. Lorsqu'elle dépasse 60%, il redémarre MetaTrader.
Le script est ci-dessous, je suis en train de le tester.
Etapes :
Le script ci-dessous redémarre Metatrader (terminal64) si la mémoire dépasse 300 Mo (selon la colonne de la mémoire dans votre gestionnaire de tâches) :
################################################################# strict-mode cls $memoryThresholdInKiloBytes = 300000 $cooldownSeconds = 30 $loopPauseInSeconds = 30 $counter = 0 while($true){ if($counter -gt 1000){ cls } #write-host "$(get-date) Checking memory in use... counter=$counter" $processPrivateSet = Get-Counter "\Process(terminal64)\Working Set - Private" $wsPrivateKiloBytes = $processPrivateSet.CounterSamples[0].CookedValue / 1KB $memoryLabel = $wsPrivateKiloBytes.ToString('## ### ###') + " K" write-host "$(get-date) Kilo Bytes in use $memoryLabel" if($wsPrivateKiloBytes -gt $memoryThresholdInKiloBytes){ write-host "$(get-date) Over threshold of $memoryLabel closing metatrader" # Close metatrader (terminal64) Get-Process terminal64 | Foreach-Object { $_.CloseMainWindow() | Out-Null } | stop-process –force # Give time to shutdown write-host "$(get-date) Shutting down cooldown of $cooldownSeconds seconds #####################" start-sleep -Seconds $cooldownSeconds # Open metatrader write-host "$(get-date) Opening metatrader again and wait $cooldownSeconds seconds" &"C:\Program Files\MetaTrader 5\terminal64.exe" start-sleep $cooldownSeconds } start-sleep -Seconds $loopPauseInSeconds $counter = $counter + 1; } # Links # http://stackoverflow.com/questions/33344611/get-memory-private-working-set-of-processAvez-vous essayé de définirTERMINAL_MAXBARSavec TerminalInfoInteger(..) à une petite valeur raisonnable ?
En plus de cela, vous avez :
TERMINAL_MEMORY_PHYSICAL
Mémoire physique du système, en Mo
int
TERMINAL_MEMORY_TOTAL
Mémoire disponible pour le processus du terminal, Mb
int
MÉMOIRE_TERMINALE_DISPONIBLE
Mémoire libre du processus du terminal, en Mo
int
MÉMOIRE_TERMINAL_UTILISÉE
Mémoire utilisée par le terminal, en Mo
int
pour vérifier où se trouve le nœud du problème.
Mon avis est que vous ne libérez pas la mémoire avec les seuls "symboles de suppression".
Essayez ceci :