Deux boucles différentes ou deux conditions dans une comparaison de vitesse de boucle
J'ai deux boucles en ce moment et à l'intérieur il y a des devoirs, mais je dois le faire de la manière la plus rapide.
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.
}
Quand j'essayais d'obtenir un meilleur résultat, je pensais que je pouvais le faire comme ci-dessous, mais le résultat était pire.
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-ce qui ne va pas ? Une idée comment puis-je accélérer? (La chose la plus importante est la vitesse, ne pensez pas à la mémoire).
ps. J'ai changé de code à cause de certains problèmes de sécurité, sans tenir compte des erreurs de syntaxe, et elementsOne.count= elementsTwo.count est le même presque tout le temps. Ne pensez pas qu'il n'y a que 5 éléments en boucle, il y a une autre boucle à l'extérieur, sa boucle continue. Désolé pour mon anglais
Réponses
Pour les performances, vous devez absolument chercher à éviter d'avoir des if
instructions dans vos boucles. Un if
provoque un branchement, ce qui signifie que vous êtes entre les mains du prédicteur de branchement du CPU.
Alors oui, vous verrez très probablement de meilleures performances si vous avez environ 20 boucles sans une if
déclaration qui sera vraie dans environ 5% des cas. Essaie ça et vois si ça aide. Assurez-vous également de mettre en cache la valeur de Count()
car cela pourrait impliquer une boucle supplémentaire.