Dois loops diferentes ou duas condições em uma comparação de velocidade de loop
Eu tenho dois loops agora e dentro deles há algumas atribuições, mas tenho que fazê-lo da maneira mais rápida.
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.
}
Ao tentar obter um resultado melhor, pensei que poderia fazer como abaixo, mas o resultado parece pior.
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.
}
O que está errado ? Alguma ideia de como posso acelerar? (O mais importante é a velocidade, não pense em memória).
ps. Mudei o código por causa de alguns problemas de segurança, não me importo com erros de sintaxe e elementsOne.count= elementsTwo.count o mesmo quase o tempo todo. Não pense que há apenas 5 itens em loop, há outro loop externo, seu loop contínuo. Desculpe pelo meu Inglês
Respostas
Para desempenho, você definitivamente deve evitar ter if
instruções em seus loops. An if
causa ramificação, o que significa que você está nas mãos do preditor de ramificação da CPU.
Então, sim, você provavelmente verá um desempenho melhor se tiver cerca de 20 loops sem uma if
declaração que será verdadeira em 5% dos casos. Tente isso e veja se ajuda. Além disso, certifique-se de armazenar em cache o valor de Count()
, pois isso pode implicar em um loop adicional.