Bir döngü hızı karşılaştırmasında iki farklı döngü veya iki koşul

Aug 17 2020

Şu anda iki döngüm var ve bunun içinde bazı görevler var, ancak bunu en hızlı şekilde yapmam gerekiyor.

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

Daha iyi sonuç almaya çalıştığımda, bunu bir aşağıda yapabileceğimi düşündüm ama sonuç daha kötü görünüyor

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

Yanlış olan ne ? Nasıl hızlandırabilirim bir fikriniz var mı? (En önemli şey hızdır, hafızayı düşünme).

ps. Bazı güvenlik sorunları nedeniyle kodu değiştirdim, sözdizimi hatalarını umursamıyorum ve elementsOne.count = elementsTwo.count neredeyse her zaman aynı. Döngüde sadece 5 öğe olduğunu düşünmeyin, dışarıda başka bir döngü var, onun sürekli döngüsü. İngilizcem için üzgünüm

Yanıtlar

1 l33t Aug 17 2020 at 17:53

Performans için, ifdöngülerinizde ifadelerden kesinlikle kaçınmalısınız . ifDallanmaya neden olan bir neden, CPU dal tahmincisinin elinde olduğunuz anlamına gelir.

Yani evet, çok olacak olasılıkla bir olmadan yaklaşık 20 döngüler varsa daha yüksek bir performans ifvakaların 5 gibi% olarak geçerli olacak açıklamada. Deneyin ve yardımcı olup olmadığına bakın. Ayrıca, Count()ek bir döngü anlamına gelebileceği için değerini önbelleğe aldığınızdan emin olun .