voracidade da memória MT5 RAM, problemas com a leitura/escrita de arquivos grandes - página 3
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
oop
Eu posso ver que oop... por que escrever arrays em cordas quando você pode escrevê-los em binário de uma só vez
Eu posso ver que oop... por que escrever arrays em cordas quando você pode escrevê-los em binário de uma só vez?
Está escrito, o homem as processa em excelência.
Diz que o homem as processa em Excel.
não diz que
não diz isso.
O primeiro posto. Se você ler com atenção, este arquivo pode não ter nada a ver com o MT5. Ou tratado de uma maneira específica.
O primeiro posto. Se você ler atentamente, este arquivo pode não ter nada a ver com o MT5. Ou tratado de uma forma específica.
Então deixe-o determinar de onde ele está tirando
Também pode ser lido como uma matriz, suponho.Obrigado pela análise do código.
Estou tendo dificuldade para entender o OOP, então fazer edições é uma tortura para mim. Como entendi, é sobre a classe, que é responsável pela leitura, que ali o arquivo inteiro é dividido em matrizes de string, e só então, se eu quiser, converto estes valores de string para outro tipo e os coloco em matrizes de tipo int no meu script. Se eu entender corretamente, então para acelerar o processo, devo ler o arquivo inteiro e descobrir quantas linhas e colunas existem e quantos símbolos estão em cada célula, e então selecionar imediatamente o tamanho da matriz? Então como fazer isso?
Eu gostaria de entender de onde são retirados 400 megabytes de uma só vez? Eu acertei que a memória é alocada, mas não é apagada/doada que foi alocada antes?
400 Mb são 36 milhões de células com linhas vazias, 12 bytes cada, 12*36=432.
Para saber como fazer melhor, fale-nos sobre o problema que você está resolvendo. Com que freqüência e quanto o arquivo muda, se todos têm que ler dele cada vez, se o número de células não vazias é constante de linha em linha, se todas as células contêm apenas inteiros. Talvez 9 minutos devam ser gastos uma vez por semana e não é muito - então não há necessidade de mudar nada.
Em geral, em termos de "onde ir para ser mais rápido", a direção principal é declarar uma estrutura com 57 campos correspondentes a valores inteiros, e utilizá-la tanto para escrita quanto para leitura (o arquivo é binário). Então, 78 Mb serão lidos mais rápido que um segundo do disco diretamente na memória, sem delimitadores ou representações de cordas. Para fins de depuração, salvar a saída para .csv também. O tamanho do arquivo determinará imediatamente o número de elementos na matriz dessas estruturas.
400 MB são 36 milhões de células com linhas vazias, cada uma com 12 bytes, 12*36=432.
A matemática é clara.
Para saber como fazer melhor, fale-nos sobre o problema que você está resolvendo. Com que freqüência e quanto o arquivo muda, se tudo precisa ser lido sempre, se o número de células não vazias é constante de linha em linha, se todas as células contêm apenas números inteiros. Talvez 9 minutos devam ser gastos uma vez por semana e não é muito - então não há necessidade de mudar nada.
A tarefa é universal, é ler arquivos em formato CSV, porque este formato é universal para diferentes programas, que atualmente me fornecem dados. Se você se refere especificamente a este script, então sim, você só precisa ler e calcular tudo, porque o Excel trava por causa das fórmulas. As células podem conter números não inteiros (não especificamente neste exemplo). 9 minutos não é muito se for uma vez por semana... Entretanto, entre outras coisas, preciso trabalhar com tal quantidade de dados através do otimizador, passando o arquivo para o lado e lá conduzindo seu processamento com a ajuda de agentes, depois obter o resultado no formato csv (aqui eu posso, é claro, usar outro formato) e conduzir o processamento novamente. É por isso que decidi discutir este problema publicamente, porque quero processar grandes matrizes de dados usando o MT5.
Em geral, do ponto de vista "onde ir para ser mais rápido" - mainstream: declarar estrutura, 57 campos dos quais correspondem a valores inteiros, e usá-la tanto para escrita quanto para leitura (arquivo é binário). Então, 78 Mb serão lidos mais rápido que um segundo do disco diretamente na memória, sem delimitadores ou representações de cordas. Para fins de depuração, salvar a saída para .csv também. O tamanho do arquivo determinará imediatamente o número de elementos na matriz dessas estruturas.
Não consigo nem imaginar, como isso pode ser feito? Ou é que o arquivo inicial deve ser gerado sob condições especiais? Então talvez você possa fazer um conversor de CSV para o formato binário?
Você também pode olhar para a segunda classe, como ensiná-la a escrever um número ilimitado de colunas?
WriteArray / Read são rápidos, tamanho máximo de até 300 mb, tudo é muito rápido, não consome RAM
Por que há tanto código de leitura/escrita, tudo é feito em 4 linhas.
Você pode demonstrar como fazer isso?
então deixe-o determinar de onde ele vem
também pode ser lido como uma matriz, eu acho queO CSV é um formato de arquivo universal, que é suportado em vários softwares, incluindo o associado ao MO.
Além disso, é um arquivo conveniente para transferir dados entre diferentes programas (scripts/advisors) MT5, e não ocupa muito espaço.
Você pode demonstrar como fazer isso?
tente ler seu arquivo desta maneira
https://www.mql5.com/ru/docs/files/filereadarray
Eu não tenho tempo para abrir o terminal agora, talvez amanhã)