這就是我想做的事:編譯器是否會針對布爾分配進行優化?
if(ABoolean || (BBoolean && CBoolean))
{
SomeButton.Enabled = true;
AnotherButton.Enabled = true;
}
else
{
SomeButton.Enabled = false;
AnotherButton.Enabled = false;
}
我可以切換這:
SomeButton.Enabled = (ABoolean || (BBoolean && CBoolean));
AnotherButton.Enabled = (ABoolean || (BBoolean && CBoolean));
對於一個更簡潔的代碼。我的問題是,編譯器是否優化了賦值,使其能夠看到布爾表達式是相同的,併爲第二個按鈕賦值,或者每次都會計算該值。
注意:我知道這是一個簡單的例子,加速/減速對於不重要的地方來說是微不足道的,但它有助於我更好地理解編譯器優化。
編輯:這就是爲什麼我認爲第二個選項可能被優化的原因:
class Program
{
static bool ABoolean = true, BBoolean = true, CBoolean = false;
static bool AEnable, BEnable;
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 1000000000; i++)
{
Operation1();
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Stopwatch sw1 = new Stopwatch();
sw1.Start();
for (int i = 0; i < 1000000000; i++)
{
Operation2();
}
sw1.Stop();
Console.WriteLine(sw1.ElapsedMilliseconds);
Console.Read();
}
static void Operation1()
{
if (ABoolean || (BBoolean && CBoolean))
{
AEnable = true;
BEnable = true;
}
else
{
AEnable = false;
BEnable = false;
}
}
static void Operation2()
{
AEnable = (ABoolean || (BBoolean && CBoolean));
BEnable = (ABoolean || (BBoolean && CBoolean));
}
}
這導致大約〜8-9超過1個十億操作第二差(與第二個選項運行速度更快)。正如我添加更多「啓用」布爾值,但第二個操作變得更慢。
順便說一句:第三種方式是通過變量賦值:'VAR啓用=(ABoolean ||( BBoolean && CBoolean))',然後使用該變量來設置'.Enabled'屬性。 – CAbbott