Dos lazos diferentes o dos condiciones en una comparación de velocidad de lazo

Aug 17 2020

Tengo dos bucles en este momento y dentro de ellos hay algunas asignaciones, pero tengo que hacerlo de la manera más rápida.

        for (var i = 0; i < Math.Min(data.elementsOne.Count(), 5)) ; i++) {
            if (data.PairSymbol == "xxx") { oldxxxA = xxxAa; xxxAa = data.elementsOne[0].Amount; oldxxxB = xxxBb; xxxBb = data.elementsTwo[0].Amount; }
            //I HAVE 20 IF BLOCK INSIDE OF IT.  
        }
        for (var i = 0; i < (Math.Min(data.elementsOne.Count(), 5)) || i < Math.Min(data.elementsTwo.Count(), 5); i++)
        {
            if (data.PairSymbol == "xxx") { oldxxxA = xxxAa; xxxAa = data.elementsOne[0].Amount; oldxxxB = xxxBb; xxxBb = data.elementsTwo[0].Amount; }
            //I HAVE 20 IF BLOCK INSIDE OF IT.  
        }

Cuando trato de obtener un mejor resultado, pensé que podía hacerlo como el siguiente, pero el resultado se veía peor.

    for (var i = 0; i < (Math.Min(data.elementsOne.Count(), 5)) || i < Math.Min(data.elementsTwo.Count(), 5); i++)
    {
        if (data.PairSymbol == "xxx") { oldxxxA = xxxAa; xxxAa = data.elementsOne[0].Amount; oldxxxB = xxxBb; xxxBb = data.elementsTwo[0].Amount; } 
        //I HAVE 20 IF BLOCK INSIDE OF IT.                          
    }

Qué está mal ? ¿Alguna idea de cómo puedo acelerar? (Lo más importante es la velocidad, no pienses en la memoria).

PD. Cambié el código debido a algunos problemas de seguridad, no me importan los errores de sintaxis, y elementsOne.count=elementsTwo.count igual casi todo el tiempo. No crea que solo hay 5 elementos en el bucle, hay otro bucle fuera, su bucle continuo. Lo siento por mi ingles

Respuestas

1 l33t Aug 17 2020 at 17:53

Para el rendimiento, definitivamente debe buscar evitar tener ifdeclaraciones en sus bucles. Una ifcausa la bifurcación, lo que significa que está en manos del predictor de bifurcación de la CPU.

Entonces, sí, es muy probable que vea un mejor rendimiento si tiene unos 20 bucles sin una ifdeclaración que sea cierta en aproximadamente el 5% de los casos. Intenta eso y mira si ayuda. Además, asegúrese de almacenar en caché el valor de Count(), ya que eso podría implicar un bucle adicional.