Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿Ha intentado establecerTERMINAL_MAXBARScon TerminalInfoInteger(..) a un valor pequeño razonable?
Además de eso tienes
TERMINAL_MEMORY_PHYSICAL
Memoria física en el sistema, Mb
int
TERMINAL_MEMORY_TOTAL
Memoria disponible para el proceso de la terminal, Mb
int
TERMINAL_MEMORIA_DISPONIBLE
Memoria libre del proceso del terminal, Mb
int
TERMINAL_MEMORIA_UTILIZADA
Memoria utilizada por el terminal, Mb
int
para comprobar dónde está el quid de la cuestión.
He puesto el TERMINAL_MAXBARS a 500 (realmente bajo) pero sigue cargando más barras (¿imagino que desde el archivo?) y la memoria sigue aumentando.
He comenzado a registrar los contadores de memoria mencionados anteriormente y pronto tendré información al respecto.
Ok tengo algunos comentarios y se ve un poco extraño. A continuación hay dos registros "MetaTrader Log" y "PowerShell Log" son dos registros que estoy ejecutando que están registrando el uso de la memoria. (El script de PowerShell es anterior en este hilo, lo actualicé para que coincida con lo que está en el Administrador de tareas). Ambos registros son la primera y la última vez que hice la última ejecución.
Puntos de interés:
##### MetaTrader Log
##### Esto fue registrado por mi logger en Metatrader. Se emite toda la memoria
#### Registro de PowerShell
#### Esto fue registrado por el script de PowerShell
29/04/2016 17:31:32 Kilo Bytes en uso 128 300 K
29/04/2016 18:05:08 Kilo Bytes en uso 215 488 K
He puesto el TERMINAL_MAXBARS a 500 (muy bajo) pero sigue cargando más barras (¿imagino que desde el archivo?) y la memoria sigue aumentando.
He comenzado a registrar los contadores de memoria mencionados anteriormente y pronto tendré información al respecto.
Ok tengo algunos comentarios y se ve un poco extraño. A continuación hay dos registros "MetaTrader Log" y "PowerShell Log" son dos registros que estoy ejecutando que están registrando el uso de la memoria. (La secuencia de comandos PowerShell es anterior en este hilo, lo he actualizado para que coincida con lo que está en el Administrador de tareas). Ambos registros son la primera y la última vez que hice la última ejecución.
Puntos de interés:
##### MetaTrader Log
##### Esto fue registrado por mi logger en Metatrader. Se emite toda la memoria
#### Registro de PowerShell
#### Esto fue registrado por el script de PowerShell
29/04/2016 17:31:32 Kilo Bytes en uso 128 300 K
29/04/2016 18:05:08 Kilo Bytes en uso 215 488 K
Yo (portátil, 8GB de ram, Win7-64) tengo un uso de ram equivalente para cada uno de mis 4 mt4.
¡Creo que no es nada de lo que tengas que preocuparte!
¿Cuántos GB quedan libres/disponibles?
Yo (portátil, 8GB de ram, Win7-64) tengo un uso de ram equivalente para cada uno de mis 4 mt4.
Creo que no es nada de lo que tengas que preocuparte.
¿Cuántos GB están todavía libres/disponibles?
Tengo un montón de RAM en los niveles anteriores en los gráficos. El problema es que cuando lo dejo en marcha va subiendo poco a poco el uso de la RAM.
Así que después de una hora o dos empieza a llegar al máximo.
Actualmente estoy ejecutando el EA en el servidor 2012, 7 GB de RAM, 4 núcleos (no estoy seguro de lo que son), 64 bits.
Tengo un montón de RAM en los niveles de arriba en los gráficos. El problema es que cuando lo dejo funcionando, lentamente aumenta el uso de la RAM.
Así que después de una hora o dos empieza a llegar al máximo.
Actualmente estoy ejecutando el EA en el servidor 2012, 7 GB de RAM, 4 núcleos (no estoy seguro de lo que son), 64 bits.
Una vez me enteré de que parece ser una característica de Win-Server mantener lo más posible en la memoria.
He reiniciado los terminales con regularidad, pero me gustaría saber si esto podría causar un accidente o no.
Una vez aprendí que parece ser una característica de Win-Server que mantiene todo lo posible en la memoria.
He reiniciado los terminales regularmente, pero me gustaría saber si esto puede causar una caída o no.
Interesante... aunque parece que tiene que ver con la carga de símbolos dentro y fuera del Market Watch.
El terminal no se bloquea, sólo empieza a funcionar muy lento, inutilmente lento.
Interesante... aunque parece que tiene que ver con la carga de símbolos dentro y fuera del Market Watch.
El terminal no se bloquea, sólo empieza a funcionar muy lento, inutilmente lento.
Es una instalación estándar de Server 2012. Sin embargo mi teoría es que no importa cómo esté configurado. Una fuga de memoria, con el tiempo, siempre ocupará todo el espacio de la máquina.
Así que no importa la velocidad o la cantidad de RAM que tenga la caja, si tiene una fuga entonces llegará al límite en algún momento.
Sólo para contribuir con mis 2 centavos en este tema.
Hay un montón de buenas ideas aquí sobre la fuga de memoria y el aumento, pero con respecto al tema y la causa raíz mis consideraciones son:
- el código fuente publicado no comprueba varios retornos de funciones relevantes, por ejemplo el retorno de SymbolSelect().
- Los bucles for/while basados en retornos de funciones, como SymbolsTotal() podrían tener algún límite o protección contra algún retorno de función de valor erróneo.
Después de estresar/cambiar el código y probar de nuevo, tal vez podamos encontrar y comprobar la causa raíz del problema.
Creo que Rogerio Figurelli tiene razón, si muchas llamadas a funciones no son devueltas, la memoria asignada no será liberada.
Tal vez puedas disminuir el tamaño de la pila para ver si da error de desbordamiento de pila.
Pila
En cada programa MQL4, se asigna un área de memoria especial llamada pila para almacenar las variables locales de las funciones que se crean automáticamente. Se asigna una pila para todas las funciones. El tamaño de la pila por defecto es de 256 kb, el tamaño de la pila se puede gestionar utilizando la directiva del compilador #property stacksize.
Las variables localesestáticas se almacenan en el mismo lugar en el que se almacenan otras variables estáticas y globales - en un área de memoria especial, que existe por separado de la pila. Las variables creadas dinámicamente también utilizan un área de memoria separada de la pila.
Con cada llamada a una función, se asigna un lugar en la pila para las variables internas no estáticas. Tras salir de la función, la memoria vuelve a estar disponible para su uso.
Si desde la primera función se llama a la segunda, entonces la segunda función ocupa el tamaño necesario de la memoria de la pila restante para sus variables. Así, cuando se utilizan funciones incluidas, la memoria de la pila se ocupará secuencialmente para cada función. Esto puede llevar a una escasez de memoria durante una de las llamadas a la función, tal situación se llama desbordamiento de la pila.
Por lo tanto, para los datos locales grandes es mejor utilizar la memoria dinámica - al entrar en una función, asignar la memoria, que se requiere para las necesidades locales, en el sistema (new, ArrayResize()), y al salir de la función, liberar la memoria (delete, ArrayFree()).
Véase también
Tipos de Datos, Encapsulación y Extensibilidad de Tipos,Inicialización de Variables, Alcance de la Visibilidad y Tiempo de Vida de las Variables, Creación y Eliminación de Objetos
Buenos puntos.
Lo probaré en algún momento y comentaré aquí los resultados.
Gracias