Почему фигурные скобки занимают время в коде C#?

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

Вот изображение, вы можете увидеть слева от фигурных скобок время в миллисекундах:

введите здесь описание изображения

Иногда я получаю больше времени, например, 5 мс...

Почему это? Это сбор мусора?


person Misha Zaslavsky    schedule 02.06.2014    source источник
comment
Я думаю, вы неправильно поняли... возврат занимает 0 мс? Хотя возможно, что это сборка мусора (для объявления temp var), но более вероятно, что время смещено   -  person Sayse    schedule 02.06.2014
comment
Что говорят документы? Я могу только догадываться, что это будет обработка параметров в стеке, подготовка локальных переменных в куче и обработка выходных параметров и очистка в конце?   -  person thst    schedule 02.06.2014
comment
Профилировщик может только измерить время, затрачиваемое машинным кодом, созданным из вашего кода C#. Преобразование машинного кода обратно в код C# не всегда идеально. Особенно, когда вы профилируете оптимизированный код, как всегда. В фигурных скобках есть накладные расходы, чтобы настроить кадр стека для метода и снова его разорвать. Это занимает в лучшем случае несколько наносекунд, умноженных на количество вызовов метода. Измерение 5 мс для этого является чрезмерным и должно считаться экспериментальной ошибкой.   -  person Hans Passant    schedule 02.06.2014
comment
@Hans Это звучит как ответ для меня.   -  person Rotem    schedule 03.06.2014
comment
Это намек, я не могу объяснить 5 мс.   -  person Hans Passant    schedule 03.06.2014


Ответы (1)


Когда метод определен, набор параметров, находящихся в области действия метода, известен компилятору и называется maxstack. Это намекает на объем памяти, выделяемый для метода.

Это может быть источником дополнительного времени - выделения памяти CLR.

Добавление большего количества фигурных скобок на самом деле не добавляет больше параметров к maxstack. Он охватывает весь метод. Область видимости — это скорее логическая группировка, чем реализуемая CLR для освобождения памяти.

Что касается вашего вопроса о GC, я не считаю, что это основная причина проблемы. При необходимости GC запускается отдельным потоком. Это может быть GC, но я серьезно сомневаюсь в этом в вашем случае.

person Dominic Zukiewicz    schedule 03.06.2014