Что 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>, просто нумерация каждого, как он идет.

Другие вопросы по тегам