Ответ 1
Нет, вы не можете реализовать API профилирования CLR в управляемом коде (С# или иным образом), поскольку обратные вызовы профилирования вызываются в очень конкретные моменты времени, когда предполагается, что управляемая среда находится в определенном состоянии. Реализация ваших обратных вызовов в управляемом коде нарушила бы множество предположений.
Дэвид Броман, разработчик API профилирования CLR, сказал следующее:
Вам нужно написать свой профилировщик в C++. Профилировщик вызывается средой выполнения в очень деликатных точках во время выполнения профилированного приложения, и часто запускать управляемый код в этих точках крайне небезопасно.
Блог Дэвида - отличный ресурс для работы с API профилирования CLR.