Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 596

 
Juer:

Tutto a posto. Lasciate che li cancelli in OnDeinit(). Ma ora ho un errore di esaurimento della memoria che spunta già durante i test... Cioè, non arriverà a OnDeinit().

Quindi creerete un mucchio di oggetti doppi. Poi tutto andrà in malora e non riuscirete a trovarne la fine.

 
Artyom Trishkin:

Così si crea un mucchio di oggetti duplicati. Allora il tutto andrà perso e non riuscirete a trovarne la fine.

Come faccio a sapere esattamente dove non sto cancellando gli oggetti? È un grande programma :)

 
Juer:

Come faccio a sapere esattamente dove non sto cancellando gli oggetti? È un grande programma :)

Dovresti prima scoprire dove e come hai creato un tale mucchio. Se la memoria non mi inganna, ne avete, quanto, diecimila? Cosa sono? Sono oggetti di dati storici? O che tipo di oggetti ne hanno così tanti? Un array di oggetti - di cosa?

 
Artyom Trishkin:

Dovresti prima scoprire dove e come hai fatto un tale mucchio. Se la memoria non mi inganna, ne avete decine di migliaia lì, vero? Cosa sono? Oggetti di dati storici? O che tipo di oggetti ne hanno così tanti? Un array di oggetti - di cosa?

Ah, c'è un sacco di roba lì dentro. Soprattutto tipi di candele e regole. È complicato ))

 
Juer:

Come faccio a sapere esattamente dove non sto cancellando gli oggetti? È un grande programma :)

Non si crea un nuovo oggetto ad ogni tick. Naturalmente è possibile (ma non sempre ragionevole secondo me), ma deve essere più ragionevole sgonfiare l'oggetto immediatamente dopo aver finito di lavorarci. Questa è l'unica spiegazione che mi viene in mente.

 
Juer:

Ah, c'è un sacco di roba lì dentro. Soprattutto tipi di candele e regole. È complicato ))

È complicato per alcuni e non per altri. Ma ora tocca a voi risolvere la situazione.

Un consiglio. Iniziare da zero. Aggiungete gradualmente gli oggetti necessari al codice e vedete cosa succede nell'output - se quando cambiate il TF o dopo aver ricompilato otterrete un messaggio nel log riguardo agli oggetti non rimossi e alle perdite di memoria, allora sistematelo. Avanti - aggiungete di nuovo la funzionalità con il controllo della corretta conservazione, dell'uso e della cancellazione di tutti gli oggetti. Dovete cancellarli voi stessi se li create con new.

 
Konstantin Nikitin:

Non si crea un nuovo oggetto ad ogni tick, vero? È possibile (ma non sempre ragionevole secondo me), ma è probabilmente più ragionevole sgonfiare l'oggetto non appena si finisce di lavorarci. Questa è l'unica spiegazione che mi viene in mente.

Su ogni candela.

 
Juer:

Su ogni candela.

Beh, se non hai bisogno degli oggetti precedenti, vale la pena rimuoverli subito.

 
Konstantin Nikitin:

Beh, se non hai bisogno degli oggetti precedenti, dovresti cancellarli subito.

Sì, questo è il punto. È così confuso, gli oggetti sono in altri oggetti e non è già così facile da cancellare. Alcuni oggetti dipendono da altri, e quelli da terzi oggetti che dipendono dai primi :)

La vita è così complicata :(

 
Juer:

Sì, questo è il punto. È così confuso, gli oggetti sono in altri oggetti e non è così facile da cancellare già. Alcuni oggetti dipendono da altri, e quelli da terzi oggetti che dipendono dai primi :)

La vita è così complicata :(

Avete confuso tutto. Un'errata pianificazione del compito è esattamente ciò che porta a tali conseguenze.

Se vengono creati oggetti in una classe, la classe deve cancellarli nel suo distruttore quando finisce. Altre classi devono controllare se l'oggetto è valido prima di ottenere un puntatore ad esso. E in linea di principio non dovrebbe esserci una relazione così intrecciata. È un po' un groviglio. Complicato non significa qualità. Tutto dovrebbe essere trasparente e tracciabile. Prima di tutto, per voi.