Bibliotecas: Mapeamento de Arquivo sem DLL - página 2

 

Alex, como você libera memória quando um arquivo não é mais necessário?

Quero dizer, de modo que eu não tenha que liberar megas e gigas de RAM, porque pode haver muitos arquivos.

 
O CloseHandle ajuda?
 
sergeev:

CloseHandle ajuda?

CloseHandle é chamado dentro de Close(), mas não libera memória e, ao reabrir (sem criar), você pode obter as informações salvas.

Isso significa que a RAM está ocupada.

void CMemMapFile::Close()
  {
   if(m_hmem!=NULL) CloseHandle(m_hmem); m_path=""; m_hmem=NULL; m_size=0; m_pos=0; m_mode=-1; // fechar a alça
  }
 

Acho que seria melhor alterar o tamanho do arquivo para 0 para garantir a liberação da memória.

Há também o Grows para aumentar o tamanho e o Delete para eliminar o arquivo, zerando a memória alocada.

 

Obrigado. Isso é muito necessário.

E, talvez, uma pergunta fora do tópico: o File Mapping pode ser adaptado para usar genética externa (por exemplo, um script executado no terminal) em vez da genética padrão ao otimizar?

 
joo:

Obrigado. Isso é muito necessário.

E, talvez, uma pergunta fora do tópico: o File Mapping pode ser adaptado para usar genética externa (por exemplo, um script executado no terminal) em vez da genética padrão durante a otimização?


A menos que seja semiautomático, alguém precisa iniciar o testador e pará-lo de qualquer forma (isso se você pretende usar o claud).

E, sem o claud, não faz sentido usar um testador.

 
Urain:

CloseHandle é chamado dentro de Close(), mas não libera memória e, ao reabrir (sem criar), você pode recuperar as informações salvas.

Acho que elas permanecem lá até que alguém as reescreva. Isso já aconteceu comigo. O aplicativo de gravação fecha o identificador e o aplicativo de leitura não. Mas ele pode ler os dados. Mas depois de algumas operações no Windows, os dados no arquivo são alterados.

O que significa que a RAM está cheia.

Não tenho certeza.
 

joo:

O mapeamento de arquivos provavelmente pode ser adaptado para usar genética externa (por exemplo, um script executado no terminal) em vez da genética padrão durante a otimização?

Se você usar arquivos para armazenar dados intermediários, é claro que pode fazê-lo. O principal é redefinir os dados para o disco em alguns pontos de referência, pois, se algo acontecer, as informações serão irremediavelmente perdidas.
 
sergeev:

Acho que ele fica lá até que alguém o reescreva. Isso já aconteceu comigo. O aplicativo de gravação fecha o identificador e o aplicativo de leitura não. Mas ele pode ler os dados. Mas depois de algumas operações no Windows, os dados no arquivo são alterados.

Não tenho certeza.
Acho que precisamos verificar isso de uma forma garantida. Mas não sei como.
 
Urain:

A menos que seja um semiautomático, alguém precisa iniciar o testador e pará-lo de qualquer forma (isso se você pretende usar uma garra).

ZY e sem um claud, não faz sentido usar um testador sem um claud.

Sim, há um problema com o claud....

Bem, eu quis dizer que o usuário executa o script no gráfico e, em seguida, inicia a otimização no testador (o script começa a "deslizar" as variáveis necessárias por meio do mapeamento de arquivos para o Expert Advisor otimizado). E como, quando e sob quais condições interromper a otimização é outra questão (por exemplo, o Expert Advisor recebe o sinalizador "pronto" e o recheio do Expert Advisor para de funcionar, de modo que o testador fará as execuções restantes no modo inativo - portanto, ele executará rapidamente as execuções restantes).

É assim.