У меня есть скрипт C# .NET 2.0, и я хочу знать, почему следующий код будет быстрее, чем цикл while в одном и том же виде.C#, который быстрее выполняет/пока или для?
private double getStop(double avgPrice, bool longTrading)
{
double stopS = 0.0;
double stopL = 0.0;
for (int i = 0; i < 13; i++)
{
if (i == 0 || i == 12)
{
stopS = 0.0;
stopL = 0.0;
}
else
{
if ((lines[i] - ((lines[i] - lines[i - 1])/2)) < avgPrice && avgPrice < (lines[i + 1] - ((lines[i + 1] - lines[i])/2)))
{
if (avgPrice < lines[i])
{
stopL = (lines[i] - ((lines[i] - lines[i - 1])/2));
stopS = lines[i];
} else {
stopL = lines[i];
stopS = (lines[i + 1] - ((lines[i + 1] - lines[i])/2));
}
}
}
}
if (longTrading)
{
return stopL;
} else {
return stopS;
}
}
Кроме того, было бы проще просто явно указать инструкцию if, а не делать их внутри цикла for?
Будучи тем, что на это был дан ответ так быстро, почему это работает намного медленнее, чем приведенный выше код?
private double getStop(double avgPrice, bool longTrading)
{
double stopS = 0.0;
double stopL = 0.0;
for (int i = 0; i < 13; i++)
{
if (i == 0 || i == 12)
{
stopS = 0.0;
stopL = 0.0;
skip = true;
}
if (!skip && (lines[i] - ((lines[i] - lines[i - 1])/2)) < avgPrice && avgPrice < (lines[i + 1] - ((lines[i + 1] - lines[i])/2)))
{
if (avgPrice < lines[i])
{
stopL = (lines[i] - ((lines[i] - lines[i - 1])/2));
stopS = lines[i];
} else {
stopL = lines[i];
stopS = (lines[i + 1] - ((lines[i + 1] - lines[i])/2));
}
}
}
skip = false;
}
if (longTrading)
{
return stopL;
} else {
return stopS;
}
}
+1: В общем, я ожидал бы, что компилятор или интерпретатор для преобразования сахара 'for' в' while'. – eyelidlessness