¿Es posible evitar muchas "ores" (||) en las condiciones que provocan la misma acción? - página 6

 
Meat:

borilunad, cualquier llamada a la función añade una frenada innecesaria. Por lo tanto, si se requiere la máxima velocidad, debe deshacerse de todos los Request(), que realizan operaciones de una sílaba. Lo mismo se aplica a los bucles. Comprobar las condiciones en un bucle es siempre mucho más lento que una serie de if() anidados

Así que incluso las condiciones mutuamente excluyentes son mejores con la acción if(A || B || C || D);

Pero no puedo evitar las llamadas a las funciones, ya que necesito comprobar muchos datos en ese punto, que están incluidos en esas condiciones.

Seguiré con mis experimentos, quizá saque algo en claro. Pero no hay control sobre la difusión. :)

 
En general, la opción más rápida sería ésta:
bool result;
if (A) result=true;
else
if (B) result=true;
else
if (C) result=true;
else
if (D) result=true;
else result=false;

if (result) Action();


Sin embargo,otra línearesult=false debería combinarse con la primera, no afectará a la velocidad.En general, si A, B, C y D contienen condiciones simples (con un mínimo de aritmética, sin llamar a todas las funciones matemáticas y otras cosas), entonces no obtendrá mucha ganancia de rendimiento de dicha optimización (a menos que esta construcción se ejecute decenas de millones de veces, por supuesto). Pero la sobrecarga de código puede ser significativa.

Escribí sobre ello en uno de los hilos que todo debe ser manejado racionalmente. Por alguna razón, me parece que su código está lleno de lugares más importantes la optimización de los cuales realmente daría una enorme ganancia de rendimiento. Usted debe comenzar con el algoritmo básico. La mayoría de los novatos tienen una comprobación tonta de todas las condiciones relativas a TS o las órdenes abiertas en cada tick. Pero en la mayoría de los casos, basta con comprobar sólo las condiciones de contorno, por ejemplo, cuando el alza o el bajo alcanzan un determinado valor, o cuando aparece una nueva barra. Sólo después de eso puede realizar otras comprobaciones.

Bueno, además de los cálculos que consumen muchos recursos hay que pensar en trasladar estos cálculos a una DLL. Por lo demás, sentarse a esperar 13 minutos en el puto MQL4 (mientras se puede obtener el mismo resultado durante 2-3 minutos) parece lamentable :)

 
Meat:
En general, la opción más rápida sería ésta:

Sin embargo,otra línearesult=false debería combinarse con la primera, no afectará a la velocidad.En general, si A, B, C y D contienen condiciones simples (con un mínimo de aritmética, sin llamadas a todas las funciones matemáticas y otras cosas), entonces no obtendrá mucha ganancia de rendimiento de dicha optimización (a menos que esta construcción se ejecute decenas de millones de veces, por supuesto). Pero la sobrecarga de código puede ser significativa.

Escribí sobre ello en uno de los hilos que todo debe ser manejado racionalmente. Por alguna razón, me parece que su código está lleno de lugares más importantes la optimización de los cuales realmente daría una enorme ganancia de rendimiento. Usted debe comenzar con el algoritmo básico. La mayoría de los novatos tienen una comprobación tonta de todas las condiciones relativas a TS o las órdenes abiertas en cada tick. Pero en la mayoría de los casos, basta con comprobar sólo las condiciones de contorno, por ejemplo, cuando el alza o el bajo alcanzan un determinado valor, o cuando aparece una nueva barra. Sólo después de eso puede realizar otras comprobaciones.

Bueno, además de los cálculos que consumen muchos recursos hay que pensar en trasladar estos cálculos a una DLL. Por lo demás, sentarse a esperar 13 minutos en el puto MQL4 (mientras se puede obtener el mismo resultado durante 2-3 minutos) parece lamentable :)

La opción más rápida fue sugerida por Paco
 
tara:
La opción más rápida fue sugerida por Paco

¿De verdad crees que sumar varios valores cada vez (es decir, realizar operaciones aritméticas innecesarias) es más rápido? En mi variante la comprobación termina en la primera coincidencia, mientras que en la variante que mencionas - sólo después de sumar todos los valores y luego comprobar la suma.

Además, esa variante requiere calcular de antemano TODAS las condiciones. ¿De qué tipo de velocidad estamos hablando? Es la opción más lenta.

 
y cambiar - caso no es una buena idea?
 

Si quieres acelerar, puedes probar con operaciones a nivel de bits.

Es decir, hacer que todas las variables sean de tipo int (false=0). Entonces A|B|C...>0

 
Avals:

Si quieres acelerar, puedes probar con operaciones a nivel de bits.

Es decir, hacer que todas las variables sean de tipo int (false=0). Entonces A|B|C...>0

¿Y qué sentido tiene todo esto? Al igual que con la suma, todas las condiciones deben ser precalculadas. Y para qué calcularlas todas, si sólo una de las condiciones es suficiente.
 

¿Y nadie comprobará las variantes sugeridas para la velocidad de ejecución?

Puede utilizar el script desde aquí

 
Meat:
En general, la opción más rápida sería ésta:

Sin embargo,otra línearesult=false debería combinarse con la primera, no afectará a la velocidad.En general, si A, B, C y D contienen condiciones simples (con un mínimo de aritmética, sin llamar a todas las funciones matemáticas y otras cosas), entonces no obtendrá mucha ganancia de rendimiento de dicha optimización (a menos que esta construcción se ejecute decenas de millones de veces, por supuesto). Pero la sobrecarga de código puede ser significativa.

Escribí sobre ello en uno de los hilos que todo debe ser manejado racionalmente. Por alguna razón, me parece que su código está lleno de lugares más importantes la optimización de los cuales realmente daría una enorme ganancia de rendimiento. Usted debe comenzar con el algoritmo básico. La mayoría de los novatos tienen una comprobación tonta de todas las condiciones relativas a TS o las órdenes abiertas en cada tick. Pero en la mayoría de los casos, basta con comprobar sólo las condiciones de contorno, por ejemplo, cuando el alza o el bajo alcanzan un determinado valor, o cuando aparece una nueva barra. Sólo después de eso puede realizar otras comprobaciones.

Bueno, además de los cálculos que consumen muchos recursos hay que pensar en trasladar estos cálculos a una DLL. De lo contrario, sería lamentable sentarse y esperar durante 13 minutos en el maldito MQL4 (aunque podemos obtener el mismo resultado en 2-3 minutos).

if (A) Action();
 else
  if (B) Action();
   else
    if (C) Action();
     else
      if (D) Action();

Así es más rápido.

Recuerdo una historia:

"En una reunión del consejo de administración de una empresa, hubo dos preguntas:

1. La decisión de construir un sincrofasotrón.

2. La decisión de construir un aparcamiento de bicicletas para los empleados.

En la primera cuestión, el debate duró 1 minuto,

en el segundo, el debate duró más de 2 horas".

 
Al que no le guste el "puto MQL4" que se vaya corriendo, corriendo. A pesar de todos los méritos y la antigüedad del relato, no está claro lo que hace aquí.
Razón de la queja: