Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 132
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Einbindung in die Klassenberechnung des Indikators - Bindung von Puffern an Klassenfelder
Leider...
Es hat nicht geklappt. Auch wenn sich der Puffer innerhalb der Klasse und des Handles befindet, verbleiben alle erstellten internen Zwischenberechnungspuffer im RAM, auch wenn die Klasseninstanz gelöscht wird.
Der Speicher wird nur durch einen Wechsel des TF gelöscht.
Der Befehl zur Speicherbereinigung per Handle fehlt offensichtlich. Zum Beispiel MemErase( int handle);
Leider...
Es hat nicht geklappt. Auch wenn sich der Puffer innerhalb der Klasse und des Handles befindet, verbleiben alle erstellten internen Zwischenberechnungspuffer im RAM, auch wenn die Klasseninstanz gelöscht wird.
Der Speicher wird nur durch einen Wechsel des TF gelöscht.
Was offensichtlich fehlt, ist ein Befehl zum Löschen des Speichers per Handle. Zum Beispiel MemErase( int handle);
1. Haben Sie die Kombinationen aus einem Objektzeiger und einer Objektinstanz (ich meine *) überprüft?
2. haben Sie den Destruktor schreiben und löschen Sie die Array-Größe in es? (ArrayFree() und ArrayResize(arr,0,0) )
Leider...
Es hat nicht geklappt. Auch wenn sich der Puffer innerhalb der Klasse und des Handles befindet, verbleiben alle erstellten internen Zwischenberechnungspuffer im RAM, auch wenn die Klasseninstanz gelöscht wird.
Der Speicher wird nur durch einen Wechsel des TF gelöscht.
Was offensichtlich fehlt, ist ein Befehl zum Löschen des Speichers per Handle. Zum Beispiel MemErase( int handle);
Und Sie haben IndicatorRelease nicht verwendet?
Dennoch halte ich es für ein leeres Unterfangen. Wozu brauchen Sie es? Um Animationen zu zeichnen? Und für den Handel? Um den gleitenden Durchschnitt zu mitteln, bis er eine gerade Linie erreicht?
Leider...
Es hat nicht geklappt. Selbst wenn sich der Puffer innerhalb der Klasse und des Handles befindet, verbleiben alle intern erstellten Zwischenpuffer im RAM, auch wenn die Klasseninstanz gelöscht wird.
Der Speicher wird nur durch einen Wechsel des TF gelöscht.
Offensichtlich fehlt ein Befehl zum Löschen des Speichers per Handle. Zum Beispiel MemErase( int handle);
Das Terminal speichert Caches für einige Zeit, auch wenn das Programm sie nicht benutzt.
Sie können feststellen, wie viel Zeit der Speicher freigegeben wird.
Haben Sie IndicatorRelease verwendet?
Trotzdem halte ich es für Zeitverschwendung. Sagen Sie mir, wofür Sie es brauchen? Um Karikaturen zu zeichnen? Und für den Handel? Um den gleitenden Durchschnitt zu mitteln, bis er eine gerade Linie erreicht?
Ja, danke, Alexey. Ich hatte diese Funktion vergessen. Ich habe es schon einmal gesehen, aber nie benutzt.
Ich habe es versucht. Irgendetwas läuft hier schief. Es wird gelöscht, dann wird es gelöscht, aber nach dem Löschen bleibt alles stehen.
Ich habe einfach eine Codezeile in die Funktion DrawSetup() vor der Berechnung des Indikators mit den folgenden Parametern eingefügt.
Der Indikator funktioniert einfach nicht mehr, und ich kann den Grund dafür noch nicht verstehen.
Ich halte das für eine aussichtslose Idee. Wozu brauche ich es? Um Karikaturen zu zeichnen? Und für den Handel? Um den gleitenden Durchschnitt zu mitteln, bis er eine gerade Linie erreicht?
Ich stimme Ihnen absolut zu. Es ist einfach ein nutzloses Spielzeug.
Das Terminal behält die Caches eine Zeit lang, auch wenn das Programm sie nicht benutzt.
Sie können messen, wie lange es dauert, bis der Speicher wieder frei wird.
Ich habe 6 Minuten gewartet und es wurde immer noch nichts gelöscht.
1. Haben Sie die Kombinationen von Objektzeiger und Objektinstanz (ich meine *) überprüft?
2. haben Sie den Destruktor schreiben und löschen Sie die Array-Größe in es? (ArrayFree() und ArrayResize(arr,0,0) )
1. Ja, ich habe es über einen Zeiger, Neu und Löschen gemacht.
2. es gibt also kein Feld. D.h. es gibt interne Arrays, aber sie haben keine Namen. Es gibt nur die Griffnummer.
Und bei jeder Iteration der for-Schleife erhöht sich der Wert der Handle-Variablen um eins. Das heißt, dass die inneren Puffer multipliziert werden und alle vorherigen an der Berechnung des nächsten Puffers beteiligt sind.
Nach der Logik sollten wir IndicatorRelease(handle); vor einer weiteren komplett neuen Berechnung des Indikators tun, aber ich habe bereits oben geschrieben, dass es den Indikator töten wird. Es ist nicht klar, warum.
Ja, danke, Alexey. Ich hatte diese Funktion vergessen. Ich habe es schon einmal gesehen, aber nie benutzt.
Ich habe es ausprobiert. Irgendetwas läuft hier schief. Er löscht sie, aber nach dem Löschen bleibt alles stehen.
Ich habe einfach eine Codezeile in die Funktion DrawSetup() vor der Berechnung des Indikators mit den folgenden Parametern eingefügt.
Der Indikator funktioniert einfach nicht mehr, und ich kann den Grund dafür immer noch nicht verstehen.
Ich stimme Ihnen absolut zu. Es ist einfach ein nutzloses Spielzeug.
Das ist nicht das, was ich dachte. Ich denke, wir sollten ein paar Handler machen, wie einen Chart Enumerator
Und wenn Sie einen neuen Griff bekommen, kann der gebrauchte Griff weggeworfen werden wie der gebrauchte ...
Das ist nicht das, was ich dachte. Ich glaube, man muss ein paar Handvoll davon machen, wie eine Graph-Suche
Und wenn Sie sich einen neuen Griff besorgen, kann der gebrauchte entsorgt werden wie der gebrauchte ...
das wird nicht funktionieren.
Auf keinen Fall