Metatrader 5 - Tira muito proveito da memória ao percorrer uma carta através de símbolos - página 4
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Você já tentou setTERMINAL_MAXBARScom TerminalInfoInteger(...) a um valor razoavelmente pequeno?
Além disso, você já tentou:
TERMINAL_MEMORY_PHYSICAL
Memória física no sistema, Mb
int
TERMINAL_MEMÓRIA_TOTAL
Memória disponível para o processo do terminal , Mb
int
TERMINAL_MEMÓRIA_DISPONÍVEL
Memória livre do processo terminal, Mb
int
TERMINAL_MEMÓRIA_UTILIZADA
Memória utilizada pelo terminal , Mb
int
para verificar onde está o cerne da questão.
Eu configurei o TERMINAL_MAXBARS para 500 (realmente baixo), mas ele ainda está carregando mais barras (imagine que seja de arquivo?) e a memória ainda está rastejando.
Comecei a registrar os contadores de memória listados acima e em breve teremos algum feedback sobre isso.
Ok recebeu algum feedback e parece um pouco estranho. Abaixo estão dois logs "MetaTrader Log" & "PowerShell Log" são dois logs que estou executando que estão registrando o uso de memória. (O script PowerShell está mais cedo neste tópico, eu o atualizei para corresponder ao que está no Gerenciador de Tarefas). Ambos os logs são a primeira e última vez que eu fiz a última execução.
Pontos de interesse:
##### Log MetaTrader
##### Isto foi registrado por meu logger em Metatrader. Ele produz toda a memória
#### Diário PowerShell
#### Isto foi registrado pelo script do PowerShell
29/04/2016 17:31:32 Kilo Bytes em uso 128 300 K
29/04/2016 18:05:08 Kilo Bytes em uso 215 488 K
Eu configurei o TERMINAL_MAXBARS para 500 (realmente baixo), mas ele ainda está carregando mais barras (imagine que seja de arquivo?) e a memória ainda está rastejando.
Comecei a registrar os contadores de memória listados acima e em breve teremos algum feedback sobre isso.
Ok, recebemos algum feedback e parece um pouco estranho. Abaixo estão dois logs "MetaTrader Log" & "PowerShell Log" são dois logs que estou executando que estão registrando o uso da memória. (O script PowerShell está mais cedo neste tópico, eu o atualizei para corresponder ao que está no Gerenciador de Tarefas). Ambos os logs são a primeira e última vez que eu fiz a última execução.
Pontos de interesse:
##### Log MetaTrader
##### Isto foi registrado por meu logger em Metatrader. Ele produz toda a memória
#### Diário PowerShell
#### Isto foi registrado pelo script do PowerShell
29/04/2016 17:31:32 Kilo Bytes em uso 128 300 K
29/04/2016 18:05:08 Kilo Bytes em uso 215 488 K
Eu (notebook, 8GB ram, Win7-64) tenho uso de ram equivalente para cada um dos meus 4 mt4.
Eu acho que não é nada com que você tenha que se preocupar!
Quantos GB ainda estão livres/disponíveis?
Eu (notebook, 8GB ram, Win7-64) tenho uso de ram equivalente para cada um dos meus 4 mt4.
Eu acho que não é nada com que você tenha que se preocupar!
Quantos GB ainda estão livres/disponíveis?
Eu tenho muitas RAM nos níveis acima nos gráficos. O problema é que quando eu o deixo funcionando, ele empurra lentamente o uso da RAM para cima.
Assim, após cerca de uma ou duas horas, ele começa a se esgotar ao máximo.
Atualmente estou rodando o EA no Servidor 2012, 7GB de RAM, 4 Núcleos (não tenho certeza do que são), 64 bits.
Eu tenho muitas RAM nos níveis acima nos gráficos. O problema é que quando eu o deixo funcionando ele empurra lentamente o uso da RAM para cima.
Assim, depois de cerca de uma ou duas horas, ele começa a ficar no máximo.
Atualmente estou rodando o EA no Servidor 2012, 7GB de RAM, 4 Cores (não tenho certeza do que são), 64 bits.
Uma vez aprendi que parece ser uma característica do Win-Server, mantendo o máximo possível na memória.
Reiniciei os terminais regularmente, mas eu ficaria curioso se isso causaria ou não um acidente!
Uma vez aprendi que parece ser uma característica do Win-Server, mantendo o máximo possível na memória.
Eu reiniciei os terminais regularmente, mas ficaria curioso se isso causaria ou não um travamento!
Interessante... embora pareça ter algo a ver com o carregamento de símbolos para dentro e para fora do Market Watch.
O terminal não trava, ele apenas começa a funcionar muito devagar, inutilizável.
Interessante... embora pareça ter algo a ver com o carregamento de símbolos para dentro e para fora do Market Watch.
O terminal não trava, apenas começa a funcionar muito devagar, inutilizável e lento.
É uma instalação padrão do Server 2012. No entanto, minha teoria é que não importa como é configurado. Um vazamento de memória ocupará sempre, com o tempo, todo o espaço da máquina.
Portanto, não importa a velocidade ou a quantidade de RAM da caixa, se ela tiver um vazamento, então ela atingirá o limite em algum momento.
Apenas para contribuir com meus 2 centavos sobre este tópico.
Há muitas boas idéias aqui sobre vazamento e aumento da memória, mas em relação ao tópico e à raiz, minhas considerações são:
- o código fonte publicado não verifica vários retornos de funções relevantes, por exemplo SymbolSelect() return.
- para/entrementes loops baseados no retorno de funções, como SymbolsTotal() poderia ter algum limite ou proteção contra algum retorno de função de valor errado.
Depois de stress/alterar o código e testar novamente, talvez possamos encontrar e comprovar a causa raiz do problema.
Eu acho que Rogério Figurelli está correto se muitas chamadas de função não forem devolvidas a memória alocada não será liberada.
Talvez você possa diminuir o tamanho do empilhamento para ver se ele dá erro de transbordo de pilha.
Empilhar
Em cada programa MQL4, uma área especial de memória chamada stack é alocada para armazenar variáveis de funções locais que são criadas automaticamente. Uma pilha é alocada para todas as funções. O tamanho padrão da pilha é 256 kb, o tamanho da pilha pode ser gerenciado usando a diretiva #property stackize compiler size.
As variáveis locaisestáticas são armazenadas no mesmo local onde outras variáveis estáticas e globais são armazenadas - em uma área de memória especial, que existe separadamente da pilha. As variáveis criadas dinamicamente também usam uma área de memória separada da pilha.
Com cada chamada de função, um lugar na pilha é alocado para variáveis internas não estáticas. Após sair da função, a memória fica disponível para uso novamente.
Se da primeira função for chamada a segunda, então a segunda função ocupa o tamanho necessário da memória da pilha restante para suas variáveis. Assim, ao utilizar as funções incluídas, a memória da pilha será ocupada seqüencialmente para cada função. Isto pode levar a uma escassez de memória durante uma das chamadas de função, tal situação é chamada de estouro de pilha.
Portanto, para grandes dados locais você deve usar melhor a memória dinâmica - ao entrar numa função, alocar a memória, que é necessária para as necessidades locais, no sistema (novo, ArrayResize()), e ao sair da função, liberar a memória (delete, ArrayFree()).
Veja também
Tipos de dados, Encapsulamento e Extensibilidade de Tipos,Inicialização de Variáveis, Escopo de Visibilidade e Tempo de Vida das Variáveis, Criação e Eliminação de Objetos
Pontos positivos.
Vamos tentar e dar um retorno aqui com resultados.
Obrigado