Caractéristiques du langage mql5, subtilités et techniques - page 132
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
envelopper dans la classe le calcul de l'indicateur - lier les tampons aux champs de la classe
Hélas...
Ça n'a pas marché. Même si le tampon se trouve à l'intérieur de la classe et du handle, tous les tampons de calcul intermédiaires internes créés restent en RAM même après la suppression de l'instance de la classe.
La mémoire est effacée uniquement en changeant le TF.
La commande de nettoyage de la mémoire par poignée est évidemment absente. Par exemple MemErase( int handle) ;
Hélas...
Ça n'a pas marché. Même si le tampon se trouve à l'intérieur de la classe et du handle, tous les tampons de calcul intermédiaires internes créés restent en RAM même après la suppression de l'instance de la classe.
La mémoire est effacée uniquement en changeant le TF.
Ce qui manque manifestement, c'est une commande destinée à vider la mémoire par poignée. Par exemple MemErase( int handle) ;
1. Avez-vous vérifié les combinaisons d'un pointeur d'objet et d'une instance d'objet (je veux dire *) ?
2. Avez-vous écrit le destructeur et supprimé la taille du tableau dans celui-ci ? (ArrayFree() et ArrayResize(arr,0,0) )
Hélas...
Ça n'a pas marché. Même si le tampon se trouve à l'intérieur de la classe et du handle, tous les tampons de calcul intermédiaires internes créés restent en RAM même après la suppression de l'instance de la classe.
La mémoire est effacée uniquement en changeant le TF.
Ce qui manque manifestement, c'est une commande destinée à vider la mémoire par poignée. Par exemple MemErase( int handle) ;
Et vous n'avez pas utilisé IndicatorRelease ?
Mais je pense quand même que c'est une entreprise vide. Pourquoi en avez-vous besoin ? Pour dessiner des animations ? Et pour le commerce ? Pour faire la moyenne de la moyenne mobile jusqu'à ce qu'elle atteigne une ligne droite ?
Hélas...
Ça n'a pas marché. Même si le tampon se trouve à l'intérieur de la classe et du handle, tous les tampons intermédiaires créés en interne restent dans la RAM, même après la suppression de l'instance de la classe.
La mémoire est effacée uniquement en changeant le TF.
La commande d'effacement de la mémoire par poignée est évidemment absente. Par exemple MemErase( int handle) ;
Le terminal conserve les caches pendant un certain temps, même si le programme ne les utilise pas.
Vous pouvez contrôler combien de temps la mémoire est libérée.
Avez-vous utilisé IndicatorRelease ?
Mais quand même, je pense que c'est une perte de temps. Dites-moi, pourquoi en avez-vous besoin ? Pour faire des dessins animés ? Et pour le commerce ? Pour faire la moyenne de la moyenne mobile jusqu'à ce qu'elle atteigne une ligne droite ?
Oui, merci, Alexey. J'avais oublié cette fonction. Je l'ai déjà vu, mais je ne l'ai jamais utilisé.
J'ai essayé. Quelque chose ne va pas. Il le supprime, mais après l'avoir supprimé, tout s'arrête.
J'ai simplement ajouté une ligne de code à la fonction DrawSetup() avant le calcul de l'indicateur avec les paramètres suivants.
L'indicateur cesse tout simplement de fonctionner et je n'arrive pas encore à en comprendre la raison.
Je pense que c'est une idée futile. Pourquoi en ai-je besoin ? Pour faire des dessins animés ? Et pour le commerce ? Pour faire la moyenne de la moyenne mobile jusqu'à ce qu'elle atteigne une ligne droite ?
Je suis tout à fait d'accord avec vous. C'est juste un jouet inutile.
Le terminal conserve les caches pendant un certain temps, même si le programme ne les utilise pas.
Vous pouvez mesurer le temps nécessaire pour que la mémoire se libère.
J'ai attendu 6 minutes et toujours rien n'a été effacé.
1. Avez-vous vérifié les combinaisons de pointeur d'objet et d'instance d'objet (je veux dire *) ?
2. Avez-vous écrit le destructeur et supprimé la taille du tableau dans celui-ci ? (ArrayFree() et ArrayResize(arr,0,0) )
1. Oui, je l'ai fait par le biais d'un pointeur, nouveau et supprimer.
2. il n'y a donc pas de tableau. C'est-à-dire qu'il y a des tableaux internes mais ils n'ont pas de noms. Il n'y a que le numéro de manche.
Et à chaque itération de la boucle for, la valeur de la variable handle augmente de un. En d'autres termes, les tampons internes sont multipliés et tous les tampons précédents participent au calcul du suivant.
Selon la logique, nous devrions faire IndicatorRelease(handle) ; avant un autre calcul complètement nouveau de l'indicateur, mais j'ai déjà écrit ci-dessus que cela va tuer l'indicateur. La raison n'est pas claire.
Oui, merci, Alexey. J'avais oublié cette fonction. Je l'ai déjà vu, mais je ne l'ai jamais utilisé.
Je l'ai essayé. Il y a quelque chose qui ne va pas. Il le supprime, mais après l'avoir supprimé, tout s'arrête.
J'ai simplement ajouté une ligne de code à la fonction DrawSetup() avant le calcul de l'indicateur avec les paramètres suivants.
L'indicateur cesse tout simplement de fonctionner et je ne comprends pas encore la raison.
Je suis tout à fait d'accord avec vous. C'est juste un jouet inutile.
Ce n'est pas ce que je pensais. Je pense que nous devrions faire un couple de gestionnaires, comme un énumérateur de graphiques.
Et une fois que vous avez une nouvelle poignée, la poignée usagée peut être jetée comme une poignée usagée...
Ce n'est pas ce que je pensais. Je pense qu'il faut faire une ou deux poignées, comme une recherche graphique.
Et une fois que vous avez une nouvelle poignée, la poignée usagée peut être jetée comme la poignée usagée ...
qui ne fonctionnera pas.
Pas du tout.