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
Entschuldigung, die Optimierung wurde in den Projekteinstellungen ausgeschaltet.
Code:
Nicht optimierte
Mit Optimierung
Bei der Optimierung ist das Gegenteil der Fall, ich habe es mehrmals überprüft.
Sie sollten zuerst die Grundlagen lernen und dann Ihren Standpunkt beweisen. Sie würden das Ergebnis auch ohne Tests verstehen, wenn Sie wenigstens ein Buch über CPU- und Speicherbetrieb gelesen hätten. Ich habe Ihnen das genialste unter ihnen angeboten, und wenn Sie beim Programmieren ein wenig vorankommen wollen, sollten Sie es unbedingt lesen.
Was haben Arbeitsspeicher und CPU damit zu tun? Es geht um Optimierung, du buchstabierender Theoretiker).
es ist nicht seltsam, Sie müssen in der Lage sein, die einfachsten Operatoren und Operationen in MQL zu testen - warum würde ich srand(GetTickCount()) zu meinem Test hinzufügen? ?
;)
Übrigens, schauen Sie genau hin, das Ergebnis in Ihrer Schleife wird in keiner Weise berücksichtigt, was bedeutet, dass es vom Compiler leicht herausgeschnitten werden kann.
Übrigens, ich habe genau hingesehen, das Ergebnis in Ihrer Schleife wird in keiner Weise berücksichtigt, so dass der Compiler es einfach herausschneiden kann.
Entfernt auch rand() - seine Compiler inlines es perfekt, machte einen solchen Test:
2019.08.18 11:55:41.457 SpeedTest (EURUSD,H1) 1. s1=rand(): loops=100000000 ms=7672
2019.08.18 11:55:49.085 SpeedTest (EURUSD,H1) 2. s2=rand(): loops=100000000 ms=7625
2019.08.18 11:55:56.796 SpeedTest (EURUSD,H1) 3. s3=rand(): loops=100000000 ms=7719
2019.08.18 11:56:04.495 SpeedTest (EURUSD,H1) 4. s4=rand(): loops=100000000 ms=7703
2019.08.18 11:56:12.113 SpeedTest (EURUSD,H1) 5. s5=rand(): loops=100000000 ms=7610
2019.08.18 11:56:17.695 SpeedTest (EURUSD,H1) 1. q=rand(): loops=100000000 ms=5578
2019.08.18 11:56:23.362 SpeedTest (EURUSD,H1) 2. q=rand(): loops=100000000 ms=5672
2019.08.18 11:56:28.970 SpeedTest (EURUSD,H1) 3. q=rand(): loops=100000000 ms=5609
2019.08.18 11:56:34.637 SpeedTest (EURUSD,H1) 4. q=rand(): loops=100000000 ms=5672
2019.08.18 11:56:40.277 SpeedTest (EURUSD,H1) 5. q=rand(): loops=100000000 ms=5640
Ich will damit sagen, wenn Sie es "richtig" machen wollen, dann gehen Sie zu Assembler. Wenn Sie alles selbst kontrollieren müssen... Der Fall, den Sie gerade beschrieben haben, ist nämlich gar nichts. Es gibt viel kompliziertere Dinge. OOP ist für Sie definitiv kontraindiziert. Sie werden nicht wissen, ob der Compiler eine bestimmte virtuelle Methode zu einem regulären Aufruf degeneriert hat oder nicht, oder ob er eine unnötige Zeigerüberprüfung gestrichen hat... Was kann man in einer verwalteten MQL mit einer solchen Paranoia tun? )
Und den Code auf Kosten der Korrektheit und Zuverlässigkeit des Codes an die Eigenheiten des Compilers (und noch dazu an imaginäre) anzupassen, ist natürlich nicht das, was ein guter Programmierer tun sollte. Und wir sprechen hier von Code-Fehlern. Eine Variable muss direkt in dem Block deklariert werden, in dem sie verwendet wird.
Ha ha ha... Alexey, du behauptest (sagen wir "du"), dass "OOP definitiv kontraindiziert ist" gegenüber einem der wichtigsten OOP-Adepten im Forum.
Der Code sollte nicht an die Eigenheiten des Compilers angepasst werden, sondern an die Eigenheiten des EIGENEN Denkens. In diesem Fall verringert die Deklaration einer Variablen innerhalb einer Schleife theoretisch die Effizienz. Denn gemäß den Konventionen muss die Variable jedes Mal erstellt und jedes Mal zerstört werden.
Es geht nicht einmal um die Frage der Effizienz. Solider Code ist ein Code, der transparent, klar und leicht zu ändern und zu pflegen ist.
Ich persönlich mag es nicht, wenn viele Variablen über das ganze Programm verstreut sind und ich jedes Mal suchen muss, wo eine bestimmte Variable erstellt wird. Daher versuche ich, wenn möglich, die Variablen am Anfang der Funktion zu deklarieren, um zu sehen, wo sie erstellt werden und um zu verstehen, wann sie gelöscht werden.
In diesem Fall ist das Beispiel nur sehr kurz. Wenn zwischen der Erstellung einer Variablen und ihrer Verwendung Dutzende von Zeilen und eine Reihe von verschachtelten Funktionen liegen, ist es meiner Meinung nach viel zuverlässiger, wenn die Variable außerhalb des Blocks, also im Voraus, deklariert wird.
Entschuldigung, die Optimierung wurde in den Projekteinstellungen ausgeschaltet.
Code:
Nicht optimierte
Mit Optimierung
Bei der Optimierung ist das Gegenteil der Fall, ich habe das schon oft überprüft.
In Ihrem Beispiel hätte man den gesamten Schleifenkörper durch Optimierung herausschneiden können.
Im Großen und Ganzen kommt alles so zusammen, wie man es erwartet, dass es nicht nötig ist, Unsinn zu machen, nach nicht existierenden Problemen zu suchen und echte Probleme zu schaffen.
Wenn es Sie juckt und Sie sich für einen coolen Hacker halten, schreiben Sie in Assembler, oder lassen Sie den Compiler seine Arbeit machen.
In diesem Beispiel hätte man den gesamten Schleifenkörper durch Optimierung herausnehmen können.
Das Ergebnis der Ausführung mit einem leeren Schleifenkörper ist ganz anders, funktioniert aber viel schneller
Im Großen und Ganzen kommt alles so zusammen, wie man es erwartet, dass es nicht nötig ist, Unsinn zu machen, nach nicht existierenden Problemen zu suchen und echte Probleme zu schaffen.
Wenn es Sie juckt und Sie sich für einen coolen Hacker halten, schreiben Sie in Assembler, ansonsten lassen Sie den Compiler einfach seine Arbeit machen.
Das Hauptproblem ist eben, dass ich mich nicht als Coolhacker betrachte. Aus diesem Grund sollten Variablen meiner Meinung nach außerhalb der Schleife deklariert werden. Und das am besten gleich zu Beginn der Funktion, auf einmal.
Und nur Koolhousers können Variablen nach Bedarf innerhalb des Codes deklarieren.
Das Hauptproblem ist eben, dass ich mich nicht als Coolhacker betrachte. Aus diesem Grund sollten Variablen meiner Meinung nach außerhalb der Schleife deklariert werden. Und zwar am besten zu Beginn der Funktion und auf einmal.
Koolhacker können Variablen nach Bedarf im Code deklarieren.
Ich ziehe es vor, meinen Code in logische Blöcke aufzuteilen und die dafür benötigten Variablen in diesen Blöcken zu deklarieren, anstatt einen Haufen von Variablen am Anfang einer Funktion zu erstellen, von denen die meisten nur in einem Block, irgendwo weit unten, benötigt werden