Bibliotecas: Mapeado de Ficheros sin la DLL - página 2

 

Alex, ¿cómo se libera memoria cuando un archivo ya no es necesario?

Quiero decir, para no tener que palear megas y gigas de RAM, porque puede haber muchos archivos.

 
¿Ayuda CloseHandle?
 
sergeev:

¿ClearHandle ayuda?

CloseHandle es llamado dentro de Close(), pero no libera memoria, y reabriendo (sin crear) puede obtener la información guardada.

Esto significa que la 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; // cerrar el asa
  }
 

Creo que sería mejor cambiar el tamaño del archivo a 0 para garantizar la liberación de memoria.

Hay Grows para aumentar el tamaño, añadir Delete para matar el archivo poniendo a cero la memoria asignada.

 

Gracias. Muy necesario.

Y, quizás, una pregunta off-topic: ¿se puede adaptar File Mapping para usar una genética externa (digamos, un script que se ejecuta en el terminal) en lugar de la estándar a la hora de optimizar?

 
joo:

Gracias. Muy necesario.

Y, quizás, una pregunta off-topic: ¿se puede adaptar File Mapping para usar una genética externa (digamos, un script que se ejecuta en el terminal) en lugar de la estándar a la hora de optimizar?


A menos que sea semiautomático, alguien tiene que iniciar el probador y detenerlo de todos modos (esto es si usted tiene la intención de utilizar claud).

Y sin claude no tiene sentido utilizar un comprobador.

 
Urain:

CloseHandle se llama dentro de Close(), pero no libera memoria, y reabriendo (sin crear) puedes recuperar la información guardada.

Creo que se queda ahí hasta que alguien lo reescribe. A mi me ha pasado esto. La aplicación que escribe cierra el handle y la que lee no. Pero puede leer los datos. Pero después de algunas operaciones en el Windows, los datos en el archivo cambian.

Lo que significa que la RAM está llena.

No estoy seguro.
 

joo:

El mapeo de archivos probablemente se puede adaptar para utilizar una genética externa (digamos, un script que se ejecuta en el terminal) en lugar de la estándar cuando se optimiza?

Si se utilizan archivos para almacenar datos intermedios, por supuesto que se puede. Lo principal es restablecer los datos en el disco en algunos puntos de referencia, porque si ocurre algo, la información se perderá irremediablemente.
 
sergeev:

Creo que se queda ahí hasta que alguien lo reescribe, me ha pasado. La aplicación que escribe cierra el handle y la aplicación que lee no. Pero puede leer los datos. Pero después de algunas operaciones en Windows, los datos en el archivo cambian.

No estoy seguro.
Supongo que tenemos que comprobarlo de una manera garantizada. Pero no se como.
 
Urain:

A menos que sea una semiautomática, alguien tiene que poner en marcha el comprobador y pararlo de todas formas (esto si pretendes usar un claud).

ZY y sin claud no tiene sentido usar un tester sin claud.

Sí, hay un problema con claud....

Bueno, me refería a que el usuario ejecuta el script en el gráfico y luego inicia la optimización en el tester (el script empieza a "colar" las variables necesarias a través de File Mapping al Expert Advisor optimizado). Y cómo, cuándo y bajo qué condiciones detener la optimización es otra cuestión (por ejemplo, el Asesor Experto recibe la bandera "listo" y el relleno del Asesor Experto deja de funcionar, por lo que el probador hará las ejecuciones restantes en modo inactivo - por lo que ejecutará rápidamente las ejecuciones restantes).

Esto es así.