Metatrader 5 - 기호를 통해 차트를 순환할 때 많은 메모리를 사용합니다. - 페이지 2

 
gr101 :

나는 Windows Server 12 R2에 그것을 넣었고 그것은 또한 메모리를 밀어냅니다.

잠시 동안 이것을 모니터링하고 이 스레드에 대한 피드백을 제공하겠습니다.

현재 650Mb입니다.

나는 아무것도 변경하지 않고 계속 실행합니다.

 
gr101 :

피드백을 주셔서 감사합니다.

Windows 10으로 업그레이드하고 차이가 있는지 확인하겠습니다.

당신은 루프에 집중하고 있습니다. EA에서 또 무엇을 사용합니까? 다른 컨트롤보다 그래픽 컨트롤 이 있습니까?
 

스레드의 앞부분에 있는 스크립트는 전체 EA(ForumQuestion1.mq5)이며 메모리를 밀어 올리는 것입니다. EA에는 다른 작업이 없습니다.

그래픽 컨트롤이 없습니다.

 

안녕 알랭

첨부된 워드 문서를 참조하십시오. 이것은 Windows Azure에서 실행되는 Windows Server 2012 R2 인스턴스에서 가져온 것입니다. 그것은 새로운 기계(그래서 재미있는 소프트웨어나 아무것도 없음)이며 서유럽 데이터 센터에서 실행 중입니다.

시간이 지남에 따라 증가하는 사용 메모리는 ForumQuestion1.mq5 스크립트를 실행할 때도 발생합니다(이전 스레드에서).

다음은 오전 8시 40분에서 오후 14시 5분까지 74.1MB에서 379.9MB로 증가한 시간에 대한 분석입니다.

오전 8시 40분

74.1MB

방금 시작했습니다 . ForumQuestion1 EA

오전 9시 53분

281.6MB

오전 10시 30분

297.2MB

오전 11시 23분

319.3MB

12:23pm

343.5MB

오후 13시

369.1MB

오후 14:05

379.9MB

파일:
 
나는 이것이 정상이라고 생각합니다. 내 MT4는 지금 1GB 램에 있습니다
 
Daniela Bluemel :
나는 이것이 정상이라고 생각합니다. 내 MT4는 지금 1GB 램에 있습니다
이 주제는 MT5 다니엘라에 관한 것입니다.
 
Alain Verleyen :
이 주제는 MT5 다니엘라에 관한 것입니다.
예 알아요. 하지만 제 MT4도 같은 동작을 합니다.
 
해결 방법을 찾았습니다 ... 예쁘지는 않지만 작동합니다.

해결 방법: 메모리를 확인 하는 PowerShell 스크립트를 실행합니다. 60% 이상이 되면 MetaTrader를 다시 시작합니다.

스크립트는 아래에 있습니다. 나는 그것을 테스트하느라 바쁩니다.

단계:

  1. Windows에서 시작을 클릭합니다.
  2. "PowerShell ISE"를 입력합니다.
  3. 아래 스크립트를 잘라내어 텍스트 편집기에 붙여넣습니다.
  4. 재생(또는 PS1 파일로 저장하고 명령 프롬프트에서 실행하지만 아직 테스트 중이므로 지금은 PowerShell ISE에서 실행)을 누릅니다.

스크립트는 메모리가 300MB를 초과하면 Metatrader(terminal64)를 다시 시작합니다(작업 관리자의 메모리 열에 따라):

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

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
 

TerminalInfoIntegerTERMINAL_MAXBARS 를 설정하려고 했습니까? (..) 합리적인 작은 값으로?

그 외에도 다음이 있습니다.

TERMINAL_MEMORY_PHYSICAL

시스템의 물리적 메모리, Mb

정수

TERMINAL_MEMORY_TOTAL

터미널의 프로세스에 사용 가능한 메모리 , Mb

정수

TERMINAL_MEMORY_AVAILABLE

터미널 프로세스의 여유 메모리, Mb

정수

TERMINAL_MEMORY_USED

터미널에서 사용하는 메모리 , Mb

정수


문제의 핵심이 어디에 있는지 확인 합니다.

 

내 2 센트는 "삭제 기호"만으로 메모리를 해제하지 않는다는 것입니다.

이 시도:

 delete symbols;
symbols= NULL ;