Metatrader 5 - Bir çizelgeyi semboller arasında dolaşırken çok fazla bellek alır - sayfa 2

 
gr101 :

Windows Server 12 R2'ye koydum ve bu da belleği yukarı itiyor.

Bunu bir süre izleyeyim ve bu konu hakkında geri bildirimde bulunayım.

Şu anda 650 Mb

Hiçbir şeyi değiştirmedim, sadece çalışmaya devam et.

 
gr101 :

Geri dönüşünüz için teşekkür ederiz.

Sanırım Windows 10'a yükselteceğim ve bunun bir fark yaratıp yaratmadığına bakacağım.

Döngüye odaklanıyorsunuz. EA'nızda başka ne kullanıyorsunuz? Grafiksel kontroller veya diğer kontroller var mı?
 

Konunun başındaki bu komut dosyası tam EA'dır (ForumQuestion1.mq5), belleği yukarı iten şey budur. EA'da başka bir işlem yoktur.

Grafiksel kontrol yok.

 

Merhaba Alain,

Lütfen ekteki word belgesine bakın. Bu, Windows Azure'da çalışan bir Windows Server 2012 R2 örneğinden alınmıştır. Bu yeni bir makine (yani komik bir yazılım ya da başka bir şey yok) ve Batı Avrupa veri merkezinde çalışıyor.

Zaman içinde artan kullanım belleği, ForumQuestion1.mq5 betiği çalıştırılırken de (konunun önceki bölümlerinden) burada gerçekleşir.

İşte 8:40'dan 14:05'e kadar olan zaman içindeki artışın bir dökümü, 74,1 MB'den 379,9 MB'a çıktı.

8:40

74,1 MB

ForumQuestion1 EA'yı yeni başlattım

9:53

281.6 MB

sabah 10:30

297,2 MB

11:23

319,3 MB

12:23

343,5 MB

13:00 öğleden sonra

369.1 MB

14:05

379,9 MB

Dosyalar:
 
bence bu normal. MT4'üm şimdi 1GB ram'de
 
Daniela Bluemel :
bence bu normal. MT4'üm şimdi 1GB ram'de
Bu konu MT5 Daniela ile ilgili.
 
Alain Verleyen :
Bu konu MT5 Daniela ile ilgili.
evet biliyorum ama MT4'üm aynı davranışa sahip
 
Etrafta bir iş buldum... hoş değil ama işe yarıyor.

Çözüm: Belleği kontrol eden bir PowerShell betiği çalıştırın. %60'ın üzerine çıktığında MetaTrader'ı yeniden başlatır.

Senaryo aşağıda, test etmekle meşgulüm.

Adımlar:

  1. Windows'ta Başlat'a tıklayın
  2. "PowerShell ISE" yazın
  3. Aşağıdaki komut dosyasını kesip metin düzenleyiciye yapıştırın
  4. Oynat'a basın (veya PS1 dosyası olarak kaydedin ve komut isteminden çalıştırın, ancak hala test ediyorum, bu yüzden şimdilik PowerShell ISE'den çalıştırıyorum)

Komut dosyası aşağıdadır, bu, bellek 300 MB'ın üzerine çıkarsa Metatrader'ı (terminal64) yeniden başlatır (Görev Yöneticinizdeki bellek sütununa göre):

#################################################################

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
 

TERMINAL_MAXBARS'ı TerminalInfoInteger ile ayarlamayı denediniz mi? (..) makul bir küçük değere?

Bunun yanında sahip olduğunuz:

TERMINAL_MEMORY_PHYSICAL

Sistemdeki fiziksel bellek, Mb

int

TERMINAL_MEMORY_TOTAL

Terminalin işlemi için kullanılabilir bellek, Mb

int

TERMINAL_MEMORY_AVAILABLE

Terminal işleminin boş hafızası, Mb

int

TERMINAL_MEMORY_USED

Terminal tarafından kullanılan bellek, Mb

int


meselenin püf noktası nerede kontrol etmek için.

 

Benim 2 sentim, yalnızca "sil sembolleri" ile hafızayı boşaltmamanızdır.

Bunu dene:

 delete symbols;
symbols= NULL ;