Почему такое различие в IL между IF и условным оператором?

C # имеет условный оператор и операторы IF, и я предположил, что условный оператор будет просто синтаксическим сахаром. Таким образом, во время компиляции он будет иметь то же самое, что и операция IF.

Однако они не имеют (см. ниже) различных IL. Попытка обернуть голову вокруг него и предположение, что это оптимизация производительности, которую получает условный оператор, потому что это ограниченный объем.

Хотелось бы знать, правильно ли мое предположение или нет, и, может быть, есть ли в этом больше?

Также в IL ПЧ есть некоторые проверки (L_000c, L_000d, L_000f) вокруг значений int, которые я не могу понять значение. Это то, что заставило меня думать, что это более надежное решение, за счет производительности из-за большего объема IF.


Код для IF

var result = "";
if (Environment.Is64BitOperatingSystem)
{
    result = "Yes";
}
else
{
    result = "No";
}
Console.WriteLine(result);

Код условного оператора (я осознаю различия, но как бы я его ни менял - присваиваю переменной и т.д. очень мало разницы)

Console.WriteLine("Is the OS x64? {0}", Environment.Is64BitOperatingSystem ? "Yes" : "No");

IL для IF

L_0001: ldstr ""
L_0006: stloc.0 
L_0007: call bool [mscorlib]System.Environment::get_Is64BitOperatingSystem()
L_000c: ldc.i4.0 
L_000d: ceq 
L_000f: stloc.2 
L_0010: ldloc.2 
L_0011: brtrue.s L_001d
L_0013: nop 
L_0014: ldstr "Yes"
L_0019: stloc.0 
L_001a: nop 
L_001b: br.s L_0025
L_001d: nop 
L_001e: ldstr "No"
L_0023: stloc.0 
L_0024: nop 
L_0025: ldloc.0 
L_0026: call void [mscorlib]System.Console::WriteLine(string)

IL для условного

L_002c: ldstr "Is the OS x64? {0}"
L_0031: call bool [mscorlib]System.Environment::get_Is64BitOperatingSystem()
L_0036: brtrue.s L_003f
L_0038: ldstr "No"
L_003d: br.s L_0044
L_003f: ldstr "Yes"
L_0044: call void [mscorlib]System.Console::WriteLine(string, object)

-121--1489511-

Предпочтительный порядок записи кортежей широты и долготы При работе с исходным кодом ГИС часто требуется запись кортежей координат широты и долготы. Например, в Google Maps ссылки (123, 456): http://maps.google.com/maps/ms?msid=214518704716144912556....

При работе с исходным кодом ГИС часто нужно писать кортежи координат широты и долготы.

Например. в Google Maps ссылки (123, 456):

http://maps.google.com/maps/ms?msid=214518704716144912556.00046d7689a99e95b721c&msa=0&ll=123, 456 & spn = 0,007996,0,026865

Что является предпочтительным порядком (и почему?)

  • широта, долгота

  • долгота, широта

Я видел как используется в различных системах, и я надеюсь найти некоторые доказательства, чтобы придерживаться другой.

128
задан Mikko Ohtamaa 5 September 2011 в 13:57
поделиться