ループ速度の比較における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()
追加のループを意味する可能性があるため、の値を必ずキャッシュしてください。