Выполняется ли в C# все операторы if перед выполнением, чтобы в случае, если оператор if не может быть правдой (до подтверждения всех условий), будет отменен?Анализ if-операторов для оптимизации производительности
Моя проблема в том, что я хочу избавиться от нескольких операторов if, потому что некоторые методы в операторе if требуют долгого выполнения (что теряется впустую, если они были выполнены).
Вот простой оператор if (здесь он работает). Но насколько это хорошо на сложных заявлениях?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace IfTest
{
class Program
{
static void Main(string[] args)
{
if (true || NeedALongTime())
{
Console.WriteLine("!");
}
Console.ReadLine();
}
private static bool NeedALongTime()
{
Thread.Sleep(10000);
return true;
}
}
}
Нет, они не все оцениваются для булевых выражений с '&&' и '||' (Google о _short-circuit_). Вот почему вы можете написать 'if (obj! = Null && obj.Value == someValue)'. Более того, если выражение можно определить и оно будет постоянным во время компиляции, тогда сам компилятор _may_ оптимизирует (в режиме освобождения) этот код (но вы также должны получить предупреждение для этого). –
И как общее утверждение, лучший способ справиться с производительностью - написать четкий, продуманный код и установить показатели производительности * *.Затем вы измеряете производительность того, что вы написали, и, если это достаточно хорошо, вы просто переходите к следующей задаче. Вы * не * хорошо пишете код, создавая список тысяч «правил» о «Я должен писать все операторы if if, такие как * this *» и т. Д. –
Он уже работает таким образом, весь if() оператор удаляется, и остается только вызов Console.WriteLine(). Конечно, вы никогда не заметите, что он работает на наносекунду быстрее. Пятая пуля в [этот пост] (http://stackoverflow.com/a/4045073/17034). –