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

 
Maxim Dmitrievsky:

portanto, é uma matriz bidimensional, uma matriz. Escreva-o.

Você pode me mostrar um exemplo de como escrever e ler arrays multidimensionais? É claro em teoria, mas a implementação não é clara.

 
Aleksey Vyazmikin:

Você pode me mostrar um exemplo de como escrever e ler arrays multidimensionais? É claro em teoria, mas a implementação não é clara.

Assim como as matrizes unidimensionais, com WriteArray()

 
Aleksey Vyazmikin:

Estou confortável em usar a classe, já a uso há 3 anos, desde o MT4 - é útil, mas caramba, é lento.

É fácil ler um fio, mas transformar tudo isso em uma estrutura de célula de trabalho é muito mais difícil.

O que você quer dizer com "não posso usar aulas"? E, além disso, o funcionário da metaquota escreveu a classe. E então, eu realmente contratei uma pessoa, paguei e esperava obter um produto acabado, mas me disseram que não há problema em ser lento... Eu acreditei neles, mas agora também tenho a memória exagerada - estou indignado.

A classe é projetada para arquivos pequenos. Não importa em nada quem criou a classe. Agora precisamos de uma abordagem diferente para ler um arquivo, para que a classe lide mal com esse arquivo.

 
Roffild:

A classe é projetada para arquivos pequenos. Não importa em nada quem criou a classe. Agora você precisa de uma abordagem diferente para ler um arquivo, para que a classe não lide bem com esse arquivo.

Vou perpetuá-la. Fodido, obrigado.

 
Maxim Dmitrievsky:

assim como as unidimensionais, através da WriteArray()

Encontrei um exemplo, vou ter que experimentá-lo, vou ter que escrever dois arquivos - para compreensão geral e provavelmente para acelerar o processamento.

Obrigado.

Acrescentei: entendo que você pode escrever apenas 1 array de cada vez, o que, naturalmente, não é muito conveniente.
 
Roffild:

A classe é projetada para arquivos pequenos. Não importa em nada quem criou a classe. Agora você precisa de uma abordagem diferente para ler um arquivo, para que a classe não lide bem com esse arquivo.

Se a memória me serve corretamente, eu disse imediatamente que precisamos trabalhar com arquivos grandes, e por exemplo, um arquivo grande foi dado - dezenas de megabytes, se não cem (precisamos observar a correspondência, e no formato atual não é conveniente fazê-lo).

 
Aleksey Vyazmikin:

Encontrei um exemplo, tenho que experimentá-lo, terei que escrever dois arquivos - para compreensão geral, e provavelmente para acelerar o processamento.

Obrigado.

Acrescentei: entendo que você pode escrever apenas 1 array de cada vez, o que, naturalmente, não é muito conveniente.

Muito conveniente :)

 
Maxim Dmitrievsky:

muito útil :)

Não é conveniente porque é necessário criar um arquivo separado para diferentes tipos de dados.

 
Aleksey Vyazmikin:

Não é conveniente, pois é preciso criar um arquivo separado para diferentes tipos de dados.

Bem, você pode colocá-lo no mesmo diretório para que ele não fique disperso. Você não terá nenhum problema. É o que eu sempre faço para os especialistas. Eu crio imediatamente um diretório chamado nome do programa/número da conta e eu coloco todos os arquivos nele.

 

Recomendo fazer uma mudança mínima primeiro, para que a realocação de memória seja feita com menos freqüência. Duas linhas

m_total_linhas++;
ArrayResize(m_células,m_total_linhas*m_total_colunas,10000);

em bool CSVReader::AdicionarData(string data_str,bool header) substituir por

m_total_linhas++;
if (m_total_linhas*m_total_colunas>ArraySize(m_cells)) ArrayResize(m_células,2*m_total_linhas*m_total_colunas);

O número de realocações de memória com cópia deve se tornar O(log(n,2)) em vez de O(n). 20 ao invés de 600 mil. Talvez isso seja suficiente para você agora.