Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 596

 
Juer:

Muy bien. Permítanme borrarlos en OnDeinit(). Pero ahora me aparece un error de falta de memoria durante las pruebas... Es decir, no llegará a OnDeinit().

Así que crearás un montón de objetos dobles. Entonces todo se irá al infierno y no podrás encontrar el final.

 
Artyom Trishkin:

Así que crea un montón de objetos duplicados. Entonces todo se perderá y no podrás encontrar el final.

¿Cómo puedo saber exactamente dónde no estoy borrando objetos? Es un gran programa :)

 
Juer:

¿Cómo puedo saber exactamente dónde no estoy borrando objetos? Es un gran programa :)

En primer lugar, debe averiguar dónde y cómo ha creado ese montón. Si la memoria no me falla, tienes, ¿cuántos, diez mil? ¿Qué son? ¿Son objetos de datos históricos? ¿O qué tipo de objetos tienen tantos? Un conjunto de objetos -¿de qué?

 
Artyom Trishkin:

En primer lugar, debe averiguar dónde y cómo ha hecho ese montón. Si la memoria no me falla, tienen decenas de miles de ellos allí, ¿no? ¿Qué son? ¿Objetos de datos históricos? ¿O qué tipo de objetos tienen tantos? Un conjunto de objetos -¿de qué?

ah, hay muchas cosas ahí. Sobre todo tipos de velas y reglas. Es complicado ))

 
Juer:

¿Cómo puedo saber exactamente dónde no estoy borrando objetos? Es un gran programa :)

No se crea un nuevo objeto en cada tic. Por supuesto que es posible (pero no siempre razonable en mi opinión), pero debe ser más razonable desinflar el objeto inmediatamente después de terminar de trabajar con él. Esta es la única explicación que se me ocurre.

 
Juer:

ah, hay un montón de cosas ahí. Sobre todo tipos de velas y reglas. Es complicado ))

Es complicado para algunos y no para otros. Pero ahora depende de ti resolverlo.

Un consejo. Empezar de cero. Añade gradualmente los objetos necesarios al código y observa lo que ocurre en la salida - si cuando cambias el TF o después de recompilar obtienes un mensaje en el registro sobre objetos no eliminados y fugas de memoria, entonces arréglalo. A continuación, añadir de nuevo la funcionalidad con la comprobación del correcto almacenamiento, uso y eliminación de todos los objetos. Deberás borrarlos tú mismo si los creas con new.

 
Konstantin Nikitin:

No se crea un nuevo objeto en cada tic, ¿verdad? Es posible (pero no siempre razonable en mi opinión), pero probablemente sea más razonable desinflar el objeto tan pronto como se termine de trabajar con él. Esa es la única explicación que se me ocurre.

En cada vela.

 
Juer:

En cada vela.

Pues si no necesitas los objetos anteriores, vale la pena eliminarlos directamente.

 
Konstantin Nikitin:

Si no necesitas los objetos anteriores, debes eliminarlos de una vez.

Sí, esa es la cuestión. Es muy confuso, los objetos están en otros objetos y no es tan fácil de eliminar ya. Unos objetos dependen de otros, y éstos de terceros que dependen de los primeros :)

La vida es tan complicada :(

 
Juer:

Sí, esa es la cuestión. Es muy confuso, los objetos están en otros objetos y no es tan fácil de eliminar ya. Unos objetos dependen de otros, y éstos de terceros que dependen de los primeros :)

La vida es tan complicada :(

Lo tienes todo mezclado. La planificación incorrecta de la tarea es precisamente lo que conduce a estas consecuencias.

Si se crean objetos en una clase, ésta debe eliminarlos en su destructor cuando termine. Otras clases deben comprobar si el objeto es válido antes de obtener un puntero a él. Y en principio no debería haber una relación tan entrelazada. Es un poco de un enredo. Complicado no significa calidad. Todo debe ser transparente y rastreable. Lo primero y más importante: para usted.

Razón de la queja: