루프 속도 비교에서 두 개의 다른 루프 또는 두 개의 조건

Aug 17 2020

지금 두 개의 루프가 있고 그 안에 몇 가지 할당이 있지만 가장 빠른 방법으로 만들어야합니다.

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

뭐가 잘못 되었 니 ? 어떻게하면 속도를 높일 수 있을까요? (가장 중요한 것은 속도, 기억을 생각하지 마십시오).

추신. 일부 보안 문제로 인해 코드를 변경했으며 구문 오류는 신경 쓰지 않으며 elementsOne.count = elementsTwo.count 거의 항상 동일합니다. 루프에 5 개의 항목 만 있다고 생각하지 마십시오. 외부에 또 다른 루프가 있으며 연속 루프가 있습니다. 내 영어 죄송합니다

답변

1 l33t Aug 17 2020 at 17:53

성능을 위해 if루프에 명령문 이 포함되지 않도록해야 합니다. 은 if당신이 CPU의 분기 예측의 손에있는 수단 분기됩니다.

그래서 그래, 당신은 매우 것입니다 가능성이 당신이없이 약 20 개 루프가있을 경우 더 나은 성능을 참조 if사례 5와 같은 %에 true가됩니다 문. 그것을 시도하고 도움이되는지 확인하십시오. 또한 Count()추가 루프를 의미 할 수 있으므로 의 값을 캐시해야합니다 .