Veröffentlichter Artikel Verwenden Sie EX5-Bibliotheken, um Ihre Entwicklungen zu fördern:
Autor: Alex Sergeev
Ai maladitsa, du hast dich geärgert, du hast dich korrigiert, ein weiterer Stecker, während es uns nicht gut geht.
Vor einem Jahr habe ich auch darunter gelitten, ich hatte eine Menge Begeisterung. Hindernisse? Nein, ich habe keine gesehen. Obwohl, vielleicht bin ich auch nur in einer Nach-Urlaubs-Stimmung ... :(
Wie hoch sind die Kosten für den Aufruf von Bibliotheksfunktionen im Vergleich zu den Kosten für den Aufruf von Funktionen nativer Klassen?
Es ist nicht nur ein einfacher Wrapper, Sie müssen die Bibliothek bei jedem Niesen aufrufen.
Gut für dich, du hast dich vollgepisst, du hast dich selbst repariert, ein weiterer Stecker, während es uns nicht so gut geht.
Eigentlich ist es hier gar nicht so schlecht.
Es ist ein guter Artikel. Ich benutze Libs die ganze Zeit -- es ist die einzige Möglichkeit der normalen Codetrennung bisher.
Sagen Sie mir lieber, wann wird es universelle Meganeuronen geben?
Urain:
Wie hoch sind die Kosten für den Aufruf von Bibliotheksfunktionen im Vergleich zu den Kosten für den Aufruf von Funktionen nativer Klassen?
Ich habe es überprüft, es gibt keinen Unterschied.
Der Aufruf der leeren Funktion Test beim Importieren oder Einbinden hat keinen Einfluss auf die Zeit.
/* #import "Graph.ex5" void Test(long achart,string name,int awnd,int ax,int ay,colour aclr); #import */ #include "Graph.mq5" void OnStart() { long a=GetTickCount(); for (int i=0; i<1000000; i++) { Test(0, "qwe", 0, 10, 10, clrRed); } Print(string(GetTickCount()-a)); }
Eigentlich ist es hier gar nicht so schlimm.
Der Artikel ist auf den Punkt gebracht. Ich verwende ständig Libs - das ist bisher die einzige Möglichkeit, Code richtig zu trennen.
Wann wird es universelle Meganeuronen geben?
Wann werden es Ihre sein?
Ehrlich gesagt, werde ich Ihre Beiträge noch ein wenig lesen und MT5 ganz aufgeben.
Ich habe die Nase voll von all diesen Krücken, wohin ich mich auch wende, alles ist durcheinander, "und sie werden die Straßenbahn starten" :)
Neuronka liegt irgendwo rum, wenn man sich ernsthaft mit Lust und Laune hinsetzt, bleibt ein Haufen Arbeit übrig, aber keine Lust.
Ich habe es überprüft, es gibt keinen Unterschied.
Ein solcher Aufruf des leeren Tests beim Importieren oder Einbinden hat keinen Einfluss auf die Zeit.
Wie man so schön sagt, man spürt den Unterschied:
2012.01.06 16:46:28 Rechner(EURUSD,H1) leer=281
2012.01.06 16:46:28 Rechner (EURUSD,H1) lib=2344
//+------------------------------------------------------------------+ //|Test.mq5 | //+------------------------------------------------------------------+ #property library void Test(long achart,string name,int &awnd,int ax,int ay,color aclr) export { awnd=ax+ay; } //+------------------------------------------------------------------+
#import "Test.ex5" void Test(long achart,string name,int &awnd,int ax,int ay,color aclr); #import void OnStart() { int res=0; long a=GetTickCount(); for(int i=0; i<100000000; i++) { Test(0,"qwe",res,10,10,clrRed); } Print("liba=",string(GetTickCount()-a)); a=GetTickCount(); for(int i=0; i<100000000; i++) { res=10+10; } Print("leer=",string(GetTickCount()-a)); }
Wie man so schön sagt: Fühlen Sie den Unterschied:
Nein, Sie fragen nach einem Funktionsaufruf, nicht wahr?
Oder wolltest du die Geschwindigkeit der Schleifenausführung überprüfen?
Ich habe den Unterschied zwischen einem einfachen Funktionsaufruf und einem Aufruf von ex5 bible geprüft. Es gibt keinen Unterschied in der Geschwindigkeit von Funktionsaufrufen.
Es ist klar, dass eine leere Schleife ohne Funktionsaufruf schneller arbeitet. warum sollte man das überhaupt prüfen.
Nein, Sie fragen nach einem Funktionsaufruf, nicht wahr?
Oder wollten Sie die Geschwindigkeit der Schleifenausführung im Allgemeinen überprüfen?
Ich habe den Unterschied zwischen einem einfachen Funktionsaufruf und einem Aufruf von ex5 bible geprüft. Es gibt keinen Unterschied in der Geschwindigkeit von Funktionsaufrufen.
Es ist klar, dass eine leere Schleife ohne einen Funktionsaufruf schneller arbeitet, warum sollte man das überhaupt prüfen.
Die Schleifen sind gleich, die ausgeführten Aktionen innerhalb der Schleifen sind gleich (in einem Fall direkt in der Schleife, im anderen Fall innerhalb der Funktion), der Zeitunterschied ergibt die Nettozeit des Funktionsaufrufs aus der Bibel.
Der Reinheit des Experiments halber wollen wir eine ähnliche Funktion direkt in der Datei beschreiben:
2012.01.06 17:18:39 Calculator (EURUSD,H1) empty=281
2012.01.06 17:18:38 Calculator (EURUSD,H1) lib=2281
//+------------------------------------------------------------------+ //|Test.mq5 | //+------------------------------------------------------------------+ #property library void Test(long achart,string name,int &awnd,int ax,int ay,color aclr) export { awnd=ax+ay; } //+------------------------------------------------------------------+
#import "Test.ex5" void Test(long achart,string name,int &awnd,int ax,int ay,color aclr); #import void Testlocal(long achart,string name,int &awnd,int ax,int ay,color aclr) { awnd=ax+ay; } void OnStart() { int res=0; int count=100000000; long a=GetTickCount(); for(int i=0; i<count; i++) { Test(0,"qwe",res,10,10,clrRed); } Print("liba=",string(GetTickCount()-a)); a=GetTickCount(); for(int i=0; i<count; i++) { Testlocal(0,"qwe",res,10,10,clrRed); } Print("leer=",string(GetTickCount()-a)); }
Um den Fehler auszuschließen, habe ich sogar die Schleifenlänge aus einer Variablenanzahl umgeschrieben, das Ergebnis ist das gleiche.
Ich habe 4,5 Mal
2012.01.06 17:28:33 test (EURUSD,D1) ex5=2047
2012.01.06 17:28:31 test (EURUSD,D1) local=438
Alex ist das nicht genug für dich?
4 mal dort, 2 mal dort, usw.
Wenn wir anfangen Bibeln zu schreiben, die auf Bibeln basieren, werden die Bremsen wie ein Schneeball wachsen.
Dieses Schema kann verwendet werden, vorausgesetzt, dass die Bibel selbst nicht den Bibelnamen verwendet.
Der Unterschied in der Geschwindigkeit des obigen Beispiels ist darauf zurückzuführen, dass der Code-Optimierer in einem Fall eine so einfache Funktion komplett überlinkt und sogar den Funktionsaufruf selbst vollständig ausgeschlossen hat, während er im anderen Fall gezwungen war, eine externe Funktion ehrlich aufzurufen.
Sie sollten bei Tests immer den unvermeidlichen Einfluss des Code-Optimierers berücksichtigen. Dieses Schleifenbeispiel degeneriert zu res=100; in einem anständigen Compiler im Falle einer lokalen Funktion.
Versuchen Sie, die aufgerufene Funktion größer zu machen, um Inlining zu vermeiden, und testen Sie sie erneut.

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Unterstützen Sie Ihre Entwicklungsprojekte mit EX5-Bibliotheken :
Indem Sie die Umsetzungsdetails von Klassen/Funktionen in einer .ex5-Datei verbergen, können Sie Ihre Know-how-Algorithmen mit anderen Entwicklern teilen, gemeinsame Projekte in die Wege leiten und sie im Internet bewerben. Und während das Team von MetaQuotes keine Mühen scheut, um die direkte Vererbung von ex5-Bibliotheksklassen zu ermöglichen, setzen wir sie jetzt schon um.
Wir erstellen eine Bibliothek von Funktionen für den Export. Diese Funktionen werden grafische Objekte wie Button, Edit, Label und Rectangle Label in einem Diagramm anzeigen, die Objekte aus dem Diagramm löschen und die Farbparameter des Diagramms zurücksetzen.
Schematisch lässt sich dies wie folgt darstellen:
Die vollständige Datei Graph.mq5 finden Sie am Ende des Beitrags. Hier führen wir nur ein Vorlagebeispiel der Zeichenfunktion Edit auf.
Autor: o_O