Deux boucles différentes ou deux conditions dans une comparaison de vitesse de boucle

Aug 17 2020

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

1 l33t Aug 17 2020 at 17:53

Pour les performances, vous devez absolument chercher à éviter d'avoir des ifinstructions dans vos boucles. Un ifprovoque 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 ifdé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.