ループ速度の比較における2つの異なるループまたは2つの条件

Aug 17 2020

現在2つのループがあり、その中にいくつかの割り当てがありますが、最速の方法で作成する必要があります。

        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.  
        }

より良い結果を得ようとすると、以下のようにできると思いましたが、結果は悪く見えます。

    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.                          
    }

なにが問題ですか ?どうすればスピードアップできますか?(最も重要なことは速度です、記憶を考えないでください)。

ps。いくつかのセキュリティ問題、構文エラーを気にしない、elementsOne.count = elementsTwo.countがほぼ常に同じであるためにコードを変更しました。ループ内に5つのアイテムしかない、外側に別のループ、その連続ループがあるとは思わないでください。私の英語でごめんなさい

回答

1 l33t Aug 17 2020 at 17:53

パフォーマンスのためifに、ループ内にステートメントが含まれないようにする必要があります。ifあなたはCPUの分岐予測の手の中にあるどの手段の分岐が発生します。

そうです、5%のケースのように当てはまるステートメントなしで、約20のループがあると、パフォーマンスが向上する可能性が非常に高くなりますif。それを試して、それが役立つかどうかを確認してください。また、Count()追加のループを意味する可能性があるため、の値を必ずキャッシュしてください。