voracidade da memória MT5 RAM, problemas com a leitura/escrita de arquivos grandes - página 7

 
Acontece que meu terminal sem o roteiro está comendo 820mb, então o binário está comendo 180 megabytes, o que aparentemente é bom, dadas as duas matrizes cheias.
 
O tópico não está bem redigido.

A memória não é consumida pelo terminal, mas por um programa específico com uma implementação específica. Neste caso, o programa MQL está armazenando dados de forma incorreta e ineficiente.
 
Aleksey Vyazmikin:

Você pode me dizer o que devo consertar nele?

Bem, tudo bem, você lê a matriz primeiro, mas depois de ler o arquivo, você tem que fechá-lo.

e depois escreva da mesma maneira, não através de sua biblioteca.

 
Renat Fatkhullin:
O tema não está bem formulado.

A memória não é consumida pelo terminal, mas por um programa específico com uma implementação específica. Neste caso, o programa MQL está armazenando dados de forma incorreta e ineficiente.

O tema foi formulado no momento em que o problema surgiu, quando não havia uma compreensão final das causas. Procedi do fato de ter uma classe que foi criada com o envolvimento de um funcionário da MQ, o que significa que eu não tinha motivos para duvidar de sua correção.

Se o programa não estiver armazenando os dados correta e eficientemente, você pode me dizer como armazená-los corretamente e eficientemente? O que devo mudar na classe para que ela consuma menos memória?

Em geral, seria muito bom se o terminal fosse entregue com classe similar para trabalhar com mesas baseadas em CSV.

 
Maxim Dmitrievsky:

Não há problema em ler primeiro a matriz, mas depois de ler o arquivo você tem que fechá-lo

e escreva da mesma maneira, não através de sua biblioteca.

Vou fechá-lo, obrigado.

Tenho que escrever em duas variantes, porque o formato CSV me ajuda a ver realmente o que está acontecendo nas matrizes - infelizmente, cometo erros e, portanto, prefiro checar novamente os cálculos em Excel ao depurar o código, do que tirar conclusões erradas mais tarde.

 
Vladimir:

O que você aprendeu com a documentação sobre o terceiro parâmetro que é útil para este caso, ao resolver o problema de levantar na memória .csvs criados em diferentes programas e com tamanho arbitrário?

Sinta-se à vontade para sugerir uma mudança melhor, não binária, o que aumenta a velocidade da realocação de memória (reduzindo o número de chamadas ArrayResize) mais do que uma busca binária...

Aula gratuita para iniciantes:

O terceiro parâmetro ArrayResize especifica o tamanho real da matriz, um múltiplo desse número.

ArrayResize(arr, 5, 1000) - levará 1000 elementos em memória.

ArrayResize(arr, 1005, 1000) - ocupará 2000 elementos em memória.

É por isso que não há alocação permanente de memória.

 
Aleksey Vyazmikin:

O tema foi formulado no momento em que o problema surgiu, quando não havia uma compreensão definitiva das causas. Minha suposição era que eu tenho uma classe que foi criada com a contribuição de um funcionário da MQ, o que significa que eu não tinha motivos para duvidar que ela estava funcionando corretamente.

Se o programa não estiver armazenando os dados correta e eficientemente, você pode me dizer como armazená-los corretamente e eficientemente? O que devo mudar na classe para que ela consuma menos memória?

Em geral, seria muito bom se o terminal fosse entregue com tal classe para trabalhar com mesas baseadas em CSV.

O problema não está na classe, mas na utilização desta classe.

Na verdade, a leitura do CSV já está implementada no nível FileOpen com a bandeira FILE_CSV.

Você não precisa de uma classe inteira separada para isso.

 
Roffild:

Uma lição gratuita para iniciantes:

O terceiro parâmetro, ArrayResize, define o tamanho real da matriz para um múltiplo deste número.

ArrayResize(arr, 5, 1000) - ocupará 1000 elementos na memória.

ArrayResize(arr, 1005, 1000) - ocupará a memória de 2000 elementos.

É por isso que não há alocação permanente de memória.

Vladimir, ao contrário de você, conseguiu analisar o código e encontrar uma maneira de acelerá-lo. E você está se posicionando aqui como um teórico que não pode lidar com o código de outra pessoa. Todas essas conclusões - o que elas lhe dão, talvez você possa mostrar que adicionar parâmetros adicionais irá acelerar o código ou reduzir o consumo de memória?


Roffild:

O problema não está na classe, mas na forma como a classe é utilizada.

Na verdade, a leitura do CSV já está implementada no nível FileOpen com a bandeira FILE_CSV.

Você não precisa de uma classe separada para isso.

Se você não entende para que serve, por que está tomando decisões pelos outros? Estou dizendo que você tem que fazer com que seja conveniente para as pessoas, é para isso que as aulas são escritas.

 
Aleksey Vyazmikin:

Vladimir, ao contrário de você, foi capaz de analisar o código e encontrar uma maneira de acelerá-lo. E você está se posicionando aqui como um teórico que não pode trabalhar com o código de outras pessoas. Todas essas conclusões - o que elas lhe dão, talvez você possa mostrar que adicionar parâmetros adicionais irá acelerar o trabalho ou reduzir o consumo de memória?

Na verdade, Vladimir não poderia tornar a classe mais rápida editando-a. A classe foi criada por um "funcionário da MQ" e um usuário que não leu a documentação conseguiu melhorar a classe?

Aleksey Vyazmikin:

Se você não entende para que serve, por que você está decidindo por outros? Eu digo que você tem que fazer com que seja conveniente para as pessoas, é para isso que as aulas são escritas.

Então, para usar funções padrão, você tem que envolvê-las em classes?

Talvez você devesse ler a documentação no FILE_CSV, em vez de usar uma classe inteira separada?

Já houve outras soluções prontas postadas aqui que foram ignoradas.

Minha solução para escrever para o CSV sem limite de colunas está em minha biblioteca. Mesmo os princípios do OOP (acho que você não está familiarizado com este método de programação) são respeitados. Mas eu não o recomendo.

É improvável que a solução certa apareça aqui de graça.

 
Roffild:

Na verdade, não há como Vladimir ter acelerado a classe com suas edições. A classe foi criada por um "funcionário da MQ" e o usuário, que não leu a documentação, conseguiu melhorar a classe?

Você verificou e nenhuma aceleração foi detectada? Ou você está dizendo que eu estou enganando todos aqui?

Roffild:

Então, para usar funções padrão, você tem que envolvê-las em classes?

Talvez você devesse ler a documentação no FILE_CSV em vez de usar uma classe inteira separada?

Já houve outras soluções prontas postadas aqui que foram ignoradas.

Minha solução para escrever para o CSV sem limite de colunas está em minha biblioteca. Mesmo os princípios do OOP (acho que você não está familiarizado com este método de programação) são respeitados. Mas eu não o recomendo.

É improvável que uma solução livre apareça aqui...

Você lê esta linha com atenção? Você já viu minha resposta à solução pronta na forma de uma função? Você tem outra solução? Claro, não sei o que é OOP, um leitor cuidadoso deste fio teria notado de imediato...

Sobre rentabilidade/livre - isso é ridículo, eu só estava mostrando que soluções pagas não as tornam melhores que as gratuitas, enquanto você está falando de dinheiro novamente...

Razão: