Due diversi loop o due condizioni in un confronto della velocità del loop
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
Per le prestazioni, dovresti assolutamente cercare di evitare di avere if
istruzioni nei tuoi loop. An if
provoca 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 if
un'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.