Dos lazos diferentes o dos condiciones en una comparación de velocidad de lazo
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
Para el rendimiento, definitivamente debe buscar evitar tener if
declaraciones en sus bucles. Una if
causa 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 if
declaració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.