Здравствуйте, rameel, Вы писали:
R>Нее, именно это я давно понял, еще кажись Андрей Акиньшин на конфе об этом рассказывал, если не путаю.
Ну да, оно в куче мест упоминается, но на практике целенаправленно не используется.
Лично я зацепился за этот момент
вот на этом ответе, если правильно нашёл.
И
вот ещё статья на тему.
R>Я другого ждал, я ждал чуда Не знаю какого, но чуда
Вот так и знал, что с AggressiveInlining проверять не будут.
(для наглядности
const int Count = 100 * 1000 * 1000;)
DirectCall: 116ms, ips: 860 304 599,45 | Mem: 3,91 kb, GC 0/1/2: 0/0/0 => 100000000 (<==)
Switch: 359ms, ips: 277 891 558,93 | Mem: 3,91 kb, GC 0/1/2: 0/0/0 => 100000000
Switch (ro): 223ms, ips: 448 026 465,82 | Mem: 8,00 kb, GC 0/1/2: 0/0/0 => 100000000
If: 76ms, ips: 1 311 236 377,89 | Mem: 8,00 kb, GC 0/1/2: 0/0/0 => 100000000
If (ro): 39ms, ips: 2 550 051 128,53 | Mem: 2,52 kb, GC 0/1/2: 0/0/0 => 100000000 (<==)
Done
Мне что, на все пасхалки капсом примечания навешивать?
Здравствуйте, Sinix, Вы писали:
S>Вот так и знал, что с AggressiveInlining проверять не будут.
S>Мне что, на все пасхалки капсом примечания навешивать?
С AggressiveInlining я как-то столкнулся с тем, что метод с достаточно объемным switch и пару while с оптмизировался до конкретной ветки, выкинув все остальное
Но джиту конечно в рантайме было известно значение аргумента, хотя все равно приятно был удивлен
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Здравствуйте, Sinix, Вы писали:
S>…но тут есть один нюанс:
S>S>Current versions of the CLR do not do this, but future versions might.
Ладно, зайдем с другой стороны. Добавляем:
static Program()
{
Console.WriteLine(falseRO);
}
... и ничего не меняется. Но меняем на:
static Program()
{
Console.WriteLine(CaseB());
}
... и вуаля:
B: Not set
A: Not set
B: Not set
C: Not set
A/B/C set? False, True, True
A: Not set
B: Set
C: Set
Done
Учитывая что MSIL методов никак не меняется, значит прикол в JIT. Самое простое объяснение — если при компиляции MSIL -> native статик конструктор уже выполнялся, то readonly поля можно заметить их значением.
Угадал?