Due diversi loop o due condizioni in un confronto della velocità del loop

Aug 17 2020

Ho due loop in questo momento e al suo interno ci sono alcuni compiti, ma devo farlo nel modo più veloce.

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

Quando ho cercato di ottenere risultati migliori, ho pensato di poterlo fare come sotto uno, ma il risultato sembra peggiore.

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

Che c'è ? Qualche idea su come posso accelerare? (La cosa più importante è la velocità, non pensare alla memoria).

p.s. Ho cambiato il codice a causa di alcuni problemi di sicurezza, non importa errori di sintassi e elementsOne.count= elementsTwo.count lo stesso quasi sempre. Non pensare che ci siano solo 5 elementi in loop, c'è un altro loop all'esterno, il suo loop continuo. Mi scusi per il mio inglese

Risposte

1 l33t Aug 17 2020 at 17:53

Per le prestazioni, dovresti assolutamente cercare di evitare di avere ifistruzioni nei tuoi loop. An ifprovoca branching, il che significa che sei nelle mani del predittore di branch della CPU.

Quindi sì, molto probabilmente vedrai prestazioni migliori se hai circa 20 loop senza ifun'affermazione che sarà vera nel 5% dei casi. Provalo e vedi se aiuta. Inoltre, assicurati di memorizzare nella cache il valore di Count()as che potrebbe implicare un ciclo aggiuntivo.