Ai maladitsa, te has meado, te has corregido, otro enchufe mientras no vamos bien.
Hace un año yo también sufría de esto, tenía mucho entusiasmo. ¿Obstáculos? No, no he visto ninguno. Aunque a lo mejor es que estoy de humor postvacacional .... :(
¿Cuál es el coste de llamar a funciones de librería comparado con el coste de llamar a funciones de clases nativas?
No es un simple wrapper, hay que llamar a la librería en cada estornudo.
Bien por ti, te has meado, te has corregido, otro tapón mientras no nos va tan bien.
En realidad, no es tan malo aquí.
Es un buen artículo. Yo uso libs todo el tiempo -- es la unica forma de separacion de codigo normal hasta ahora.
Será mejor que me digas -- ¿cuándo habrá meganeuronas universales?
Urain:
¿Cuál es el coste de llamar a funciones de biblioteca comparado con el coste de llamar a funciones de clases nativas?
Lo he comprobado, no hay diferencia.
Esta llamada de la función Test empty al importar o incluir no afecta al tiempo.
/* #import "Graph.ex5" void Test(long achart,string name,int awnd,int ax,int ay,color 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)); }
En realidad, no es para tanto.
El artículo va al grano. Yo uso libs todo el tiempo -- es la única manera de separar el código correctamente hasta ahora.
¿Cuándo habrá meganeuronas universales?
¿Cuándo serán las suyas?
Francamente hablando, leeré un poco más tus posts y dejaré MT5 por completo.
Estoy harto de todas estas muletillas hasta el tuétano del alma, mire donde mire todo está estropeado, "y van a poner en marcha el tranvía" :)
Neuronka está por ahí tirado, si te pones en serio con ganas de sentarte queda una figurita de trabajo, pero sin ganas.
Lo he comprobado, no hay ninguna diferencia.
tal llamada de la Prueba vacía al importar o incluir no afecta el tiempo.
Como se suele decir, sentir la diferencia:
2012.01.06 16:46:28 Calculadora(EURUSD,H1) empty=281
2012.01.06 16:46:28 Calculadora (EURUSD,H1) lib=2344
//+------------------------------------------------------------------+ //|Prueba.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("empty=",string(GetTickCount()-a)); }
Como se suele decir, siente la diferencia:
No, preguntas por una llamada a una función, ¿no?
¿O querías comprobar la velocidad de ejecución de un bucle?
He comprobado la diferencia entre una simple llamada a función o una llamada de ex5 bible. No hay diferencia en la velocidad de las llamadas a función.
Está claro que un bucle vacío sin una llamada a función funcionará más rápido. para qué comprobarlo.
No, preguntas por una llamada a función, ¿no?
¿O quería comprobar la velocidad de ejecución del bucle en general?
He comprobado la diferencia entre una simple llamada a función o una llamada de ex5 bible. No hay diferencia en la velocidad de las llamadas a función.
Está claro que un bucle vacío sin una llamada a función funcionará más rápido. para qué comprobarlo.
Los bucles son los mismos, las acciones ejecutadas dentro de los bucles son las mismas (en un caso directamente en el bucle en el otro caso dentro de la función) la diferencia de tiempo da el tiempo neto de llamada a función desde la lib.
Para la pureza del experimento, vamos a describir una función similar directamente en el archivo:
2012.01.06 17:18:39 Calculadora (EURUSD,H1) empty=281
2012.01.06 17:18:38 Calculadora (EURUSD,H1) lib=2281
//+------------------------------------------------------------------+ //|Prueba.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("empty=",string(GetTickCount()-a)); }
Para excluir el error, incluso reescribí la longitud del bucle de una cuenta variable, el resultado es el mismo.
Tengo 4,5 veces
2012.01.06 17:28:33 prueba (EURUSD,D1) ex5=2047
2012.01.06 17:28:31 prueba (EURUSD,D1) local=438
Alex no es esto suficiente para usted?
4 veces ahí, 2 veces ahí, etc.
Si empezamos a escribir biblias basadas en biblias, los frenos crecerán como una bola de nieve.
Este esquema se puede utilizar siempre que la propia biblia no utilice la llamada biblia.
La diferencia en la velocidad del ejemplo anterior se debe a que, en un caso, el optimizador de código sobrelineó completamente una función tan sencilla y excluyó por completo incluso la propia llamada a la función, mientras que en el otro caso se vio obligado a llamar honestamente a una función externa.
Siempre hay que tener en cuenta la inevitable influencia del optimizador de código en las pruebas. Este ejemplo de bucle degenera en res=100; en un compilador decente en el caso de una función local.
Intenta hacer la función llamada más grande para evitar el inlining y vuelve a probarlo.
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Promocione sus proyectos de desarrollo usando las librerías EX5:
Ocultar los detalles de la implementación de las clases/funciones en un archivo .ex5 le permitirá compartir sus algoritmos propios con otros desarrolladores, iniciar proyectos y promocionarlos en la Web. Y mientras el equipo de MetaQuotes no escatima esfuerzos para tener la posibilidad de heredar directamente las clases de las librerías ex5, vamos a implementarlas ahora.
Autor: o_O