Ermitteln der Anzahl der Dezimalstellen beliebiger Zahlen (nicht nur Anführungszeichen) unter Umgehung von Digits() in MQL4 und MQL5 - Seite 14
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Kann ich Brainstorming auf eine schnelle Implementierung der Übersetzung eines Arrays von Strukturen (Länge Vielfache von sizeof(int)) zu und von einem int[] Array?
Praktische Anwendung ist der schnelle Datenaustausch über Ressourcen. Meine Variante ist zu universell, so dass sie sich verlangsamt.
Diese Funktionen wurden in MT5 eingeführt
Diese gibt es in MT4 nicht und wird es wahrscheinlich auch nicht geben. Wir müssen also das Problem mit und ohne diese Funktionen lösen (falls sie nützlich sind).
Das Ergebnis wird für eine große Zahl von Forumsnutzern hier nützlich sein.
Ich habe eine sehr einfache Vorlage für ein Brainstorming mit meiner Lösung für dieses Problem geschrieben.
Ergebnis
Ergebnis
Etwas, das wesentlich schneller ist als die zweite Option. Es gibt wahrscheinlich keine Möglichkeit, dies zu beschleunigen.
eineschnelle Implementierung der Umwandlung eines Arrays von Strukturen (Länge ein Vielfaches von sizeof(int)) in und aus einem int[]-Array?
Etwa so
Etwa so.
Gut gemacht! Ich werde mich mit dem Code befassen, danke.
Klingt so, als ob ArrayCopy ein echter Langweiler ist.
ZY Von Lauf zu Lauf erhalte ich sehr unterschiedliche Ergebnisse. Wenn ich zum Beispiel die Reihenfolge der Tests ändere, wird fast alles umgedreht. Offensichtlich ist eine objektivere Geschwindigkeitsmessung erforderlich.
ZZZ, ArrayCopy scheint ein bisschen lästig zu sein.
Ich erinnere mich, dass ich an einer lokalen Aufgabe gemessen habe, bei der ich eine kleine Anzahl von Elementen kopieren musste. Bis zu 16 Elementen war die for-Schleife viel schneller als die ArrayCopy-Schleife, wenn die Anzahl der Elemente größer war, war die ArrayCopy-Schleife schneller. Natürlich ist die schnellste Variante ganz ohne Schleifen (wie meine Funktionen auf der vorherigen Seite)
Am schnellsten geht es, wenn Sie ganz ohne Schleifen auskommen (wie meine Funktionen auf der vorherigen Seite).
Das verstehe ich nicht.
Das verstehe ich nicht.
Mein Punkt ist, dass for(int i=0; i<5; i++) dst[i]=src[i]; langsamer arbeitet als dst[0]=src[0];dst[1]=src[1];dst[2]=src[2];dst[3]=src[3];dst[4]=src[4];
was in Anbetracht der zusätzlichen Operationen im Zusammenhang mit der Schleifensteuerung ziemlich offensichtlich ist)
Und CopyArray funktioniert viel schneller als beide, wie ich es jetzt überprüft habe. Vielleicht hängt es natürlich von der Situation ab.
Ja, dies wird viel schneller funktionieren (wo möglich ersetzt durch ArrayCopy, der Rest ist derselbe):
Wie gesagt, ich habe das Erste geschrieben, was mir in den Sinn kam, ohne Tests))
Und CopyArray, wie ich es jetzt überprüft habe, funktioniert viel schneller als beide Optionen, so scheint es. Das hängt natürlich von der jeweiligen Situation ab.
Wenn ArrayCopy() nach dem Prinzip von Cish memmove() durchgeführt wird,
Ich denke, die Geschwindigkeit von ArrayCopy() hängt von der Geschwindigkeit der Speicherzuweisung ab, wenn der Zwischenpufferspeicher zum Kopieren bereit ist, wird ArrayCopy() sehr schnell ausgeführt, wenn der Speicher nicht zugewiesen ist, werden Sie Anfragen an das Betriebssystem starten, um Speicher zuzuweisen
Sie können versuchen zu testen - machen Sie einen Aufruf von ArrayCopy() mit einer großen Datenmenge, wodurch der Pufferspeicher für den Austausch vorbereitet wird, und machen Sie dann eine Schleife mit ArrayCopy() mit einer kleineren Datenmenge zum Kopieren und mit dem Geschwindigkeitsmesser