Что ClassName.ctor>b__11 обозначает в dotTrace Profiler?
При использовании профилировщика dotTrace я получаю много звонков NamespaceName.ClassName.ctor>b__11
(Когда я использовал профилировщик Equatec в своем приложении, я получил похожие результаты при вызове загадочной функции NamespaceName.ClassName.<ctor>b__11
). Сначала я предположил, что это конструктор ClassName
но точка разрыва внутри конструктора ClassName
был поражен только один раз. Я предполагаю, что это автоматически сгенерированная функция, и если это так, как я могу найти, где она вызывается? Какое отношение это имеет к конструктору ClassName
если конструктор вызывается только один раз?
1 ответ
Это, вероятно, лямбда, объявленная в конструкторе. Вы подписались на событие в конструкторе, используя =>
синтаксис или что-то еще, что будет часто вызываться?
Когда вы используете лямбду, компилятор C# превращает это в закрытый метод и использует делегат этого метода. (И другие хитрые трюки, если вы делаете захват переменных.)
Глядя на другие классы в Reflector, похоже, что компилятор C# просто нумерует каждую лямбду, когда превращает их в методы, в соответствии с соглашением об именах, которое вы заметили, <methodName>b__<number>
, просто нумерация каждого, как он идет.