Dua kondisi loop atau dua loop yang berbeda dalam perbandingan kecepatan loop
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
Untuk kinerja, Anda pasti harus berusaha untuk menghindari if
pernyataan di loop Anda. Sebuah if
menyebabkan 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 if
pernyataan 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.