Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 596

 
Juer:

Muito bem. Deixe-me apagá-los no OnDeinit(). Mas agora tenho um erro de memória que já aparece durante os testes... Ou seja, não chegará ao OnDeinit().

Assim, você criará um monte de objetos duplos. Então tudo irá para o inferno e você não será capaz de encontrar o fim disso.

 
Artyom Trishkin:

Assim, você cria um monte de objetos duplicados. Então a coisa toda vai ficar inchada e você não vai encontrar o fim dela.

Como posso saber exatamente onde não estou apagando objetos? É um grande programa :)

 
Juer:

Como posso saber exatamente onde não estou apagando objetos? É um grande programa :)

Você deve primeiro descobrir onde e como você criou tal pilha. Se a memória não me falha, você tem, o quê, dez mil deles? O que são eles? Objetos de dados históricos? Ou que tipo de objetos têm tantos deles? Um conjunto de objetos - de quê?

 
Artyom Trishkin:

Você deve primeiro descobrir onde e como você fez tal pilha. Se a memória não me falha, você tem dezenas de milhares deles lá, não é mesmo? O que são eles? Objetos de dados históricos? Ou que tipo de objetos têm tantos deles? Um conjunto de objetos - de quê?

ah, há muita coisa lá dentro. Na maioria dos casos, tipos de velas e regras. É complicado ))

 
Juer:

Como posso saber exatamente onde não estou apagando objetos? É um grande programa :)

Não se cria um novo objeto em cada tick. Claro que é possível (mas nem sempre razoável na minha opinião), mas deve ser mais razoável esvaziar o objeto imediatamente após terminar de trabalhar com ele. Esta é a única explicação que me ocorre.

 
Juer:

ah, há muita coisa lá dentro. Na maioria dos casos, tipos de velas e regras. É complicado ))

É complicado para alguns e não para outros. Mas cabe a você resolvê-lo agora.

Uma palavra de conselho. Comece do zero. Gradualmente adicione os objetos necessários ao código e veja o que acontece na saída - se ao mudar o TF ou após a recompilação você receberá uma mensagem no log sobre objetos não removidos e vazamentos de memória, então conserte-o. A seguir - novamente adicionar funcionalidade com verificação para o correto armazenamento, uso e exclusão de todos os objetos. Você mesmo deve apagá-las se as criar com novas.

 
Konstantin Nikitin:

Não se cria um novo objeto em cada tick. É possível (mas nem sempre razoável, na minha opinião), mas provavelmente é mais razoável esvaziar o objeto assim que você terminar de trabalhar com ele. Essa é a única explicação que me vem à mente.

Em cada vela.

 
Juer:

Em cada vela.

Bem, se você não precisa dos objetos anteriores, vale a pena removê-los imediatamente.

 
Konstantin Nikitin:

Bem, se você não precisa dos objetos anteriores, você deve apagá-los imediatamente.

Sim, é isso mesmo. É tão confuso, os objetos estão em outros objetos e já não é tão fácil de apagar. Alguns objetos dependem de outros, e os de terceiros objetos que dependem dos primeiros :)

A vida é tão complicada :(

 
Juer:

Sim, é isso mesmo. É tão confuso, os objetos estão em outros objetos e já não é tão fácil de apagar. Alguns objetos dependem de outros, e os de terceiros objetos que dependem dos primeiros :)

A vida é tão complicada :(

Você tem tudo isso misturado. O planejamento incorreto da tarefa é exatamente o que leva a tais conseqüências.

Se os objetos são criados em uma classe, a classe deve apagá-los em seu destruidor quando ela terminar. Outras classes devem verificar se o objeto é válido antes de obter um ponteiro para ele. E, em princípio, não deveria haver uma relação tão entrelaçada. É um pouco emaranhado. Complicado não significa qualidade. Tudo deve ser transparente e rastreável. Antes de tudo - para você.

Razão: