Precisa de ajuda! Não consigo resolver o problema, estou atingindo limitações de hardware
komposter:
Algum conselho, amigos? Eu cuidarei disso).
Como opções...
1. faça seu próprio cache. Neste caso, você controla o que está na memória. Você conhece o algoritmo, assim você pode fazer o cache eficiente.
2. Use o mapeamento para o arquivo. O vento irá armazenar o que ele precisa e não irá limpar o disco rígido.
Como opções...
1. faça seu próprio cache. Neste caso, você mesmo poderá gerenciar todo o conteúdo.
2. use o mapeamento para o arquivo. vin em si vai armazenar o que ele precisa, de modo que não vai sobrescrever o disco.
1. este é o cache... Ou eu não entendo o que você quer dizer. Minha opção de ler constantemente os pedaços necessários?
2. Você pode elaborar um pouco mais? O que fará o mapeamento e qual a forma de abordá-lo?
Oh, merda...
32-битные архитектуры (Intel 386, ARM 9) не могут создавать отображения длиной более 4 Гб
Os mesmos ovos, mas de lado. A leitura pode ser acelerada, mas não resolve o problema globalmente.
Outra idéia é mover tudo para um banco de dados (MySQL?) e trabalhar com ele. A idéia é que os bancos de dados sejam projetados para tais volumes e escavação constante.
Existe algum especialista? Quem tem algo a dizer?
1) Há alguma maneira de refazer o algoritmo? Para carregar um bloco (2GB), processá-lo, salvar o resultado (mais curto), liberar memória, carregar o próximo bloco ...
e, ao final, processar todos os resultados novamente.
2) Quando há muito trabalho com memória, as soluções baseadas em hash, árvores B (e suas modificações), offload to database são associadas.
1) Há alguma maneira de refazer o algoritmo? Para carregar um bloco (2GB), processá-lo, salvar o resultado (mais curto), liberar memória, carregar o próximo bloco ...
e, ao final, processar todos os resultados novamente.
2) Quando há muito trabalho com memória, soluções baseadas em hash, árvores B (e suas modificações), descarga para o banco de dados são associadas.
1. eu escrevi sobre isso - você pode, mas o problema é que você tem que processar os dados várias vezes. Será muito lento.
2. Amanhã eu mesmo irei ao Google, serei grato por uma breve descrição.
1. eu escrevi sobre isso - você pode, mas o problema é que você tem que processar os dados várias vezes. Seria muito lento.
2. Amanhã eu mesmo irei ao Google, ficaria grato por uma breve descrição.
Lembrei-me de um site onde um problema semelhante e variantes de sua solução em C++ foram discutidos.
![Отсортировать строки в файле размером 3GB | FulcrumWeb Отсортировать строки в файле размером 3GB | FulcrumWeb](https://c.mql5.com/36/5/otsortirovat-stroki-v-fayle-razmerom.png)
- www.fulcrumweb.com.ua
1. Naturalmente, use um sistema x64.
2. alugar uma máquina mais potente na nuvem EC2 da Amazônia e fazer os cálculos sobre ela.
3. Usar dados comprimidos, descomprimir na memória em tempo real. Dados reais são melhor comprimidos se você os dividir em fluxos (sinal/mantissa/exponente); você pode usar flutuador de 12 bits (às custas da precisão).
4. fazer um cálculo fora do consultor com algo que possa lidar com grandes dados (Matlab/R/etc).
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Há uma grande quantidade de informações (cerca de 20 GB em um arquivo de texto).
As informações consistem no mesmo tipo de seqüências, cerca de um milhão delas.
É necessário passar por todas as seqüênciasrepetidamente e fazer alguns cálculos.
A primeira coisa que vem à mente é ler todo o conteúdo do arquivo, preencher o conjunto de estruturas com ele e trabalhar com elas em memória.
Mas dá errado, com o próximo redimensionamento da MT jura "Memory handler: cannot allocing 5610000 bytes de memória".
O despachante mostra que o terminal.exe usa 3,5 GB de RAM (de 16 físicas). Presumo que isto se deva ao fato de que o processo só pode obter 4GB.
A EA diz "Memória insuficiente(4007 Mb usado, 88 Mb disponível, 4095 Mb total)!!!"!
E isto é apenas 15,3% da quantidade necessária (e eu gostaria de aumentá-la também no futuro).
Opção 2 - ler cada vez que o arquivo. Encontre a peça necessária, guarde-a na estrutura, leia a próxima peça, compare o resultado, sobrescreva a estrutura.
E se eu tivesse que passar por estas seqüências uma vez, seria o que eu faria. Mas é preciso passar por elas muitas vezes, avançando um pouco a cada vez.
Portanto, você tem que ler muitas vezes, o que é:
Também é frustrante a quantidade de informação que existe... Se fosse 10 GiG, eu o moveria para o disco RAM (na verdade, para a memória) e leria o máximo que pudesse. Sim?
É tudo o que consigo pensar.
Tente recompilar estas seqüências, para que haja muitas - muitas peças, mas cada uma contendo apenas as informações necessárias no momento?
Tente também comprimir os dados (já converti para flutuadores com tipos de carvão em qualquer lugar que eu possa)? Mas isso me dará no máximo 10%-20% mais e preciso reduzir o volume em uma ordem de grandeza...
Algum conselho, amigos? Eu vou buscá-lo )