Dua kondisi loop atau dua loop yang berbeda dalam perbandingan kecepatan loop

Aug 17 2020

Saya memiliki dua putaran sekarang dan di dalamnya ada beberapa tugas, tetapi saya harus membuatnya dengan cara tercepat.

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

Ketika saya mencoba untuk mendapatkan hasil yang lebih baik, saya pikir saya bisa melakukannya seperti di bawah ini tetapi hasilnya terlihat lebih buruk.

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

Apa yang salah ? Tahu bagaimana saya bisa mempercepat? (Yang terpenting adalah kecepatan, jangan pikirkan memori).

ps. Saya mengubah kode karena beberapa masalah keamanan, tidak keberatan kesalahan sintaks, dan elementsOne.count = elementsTwo.count hampir selalu sama. Jangan mengira hanya ada 5 item dalam loop, ada loop lain di luar, loop kontinu. Maaf untuk bahasa Inggris saya

Jawaban

1 l33t Aug 17 2020 at 17:53

Untuk kinerja, Anda pasti harus berusaha untuk menghindari ifpernyataan di loop Anda. Sebuah ifmenyebabkan percabangan yang berarti Anda berada di tangan prediktor cabang CPU.

Jadi ya, Anda kemungkinan besar akan melihat kinerja yang lebih baik jika Anda memiliki sekitar 20 loop tanpa ifpernyataan yang akan benar seperti 5% kasus. Cobalah dan lihat apakah itu membantu. Selain itu, pastikan untuk menyimpan nilai Count()as yang mungkin menyiratkan perulangan tambahan.