Исчерпывающего ответа у меня нет, но есть наводящие мысли.
1. Вот тут описан глюк трейспарсера когда он неправильно отображал время и указан способ как узнать правильное время между событиями.
Тормозит создание буфера.
2. Если код исполняется в CIL то при вызове функций ядра у нас получается передача управления между управляемым кодом и неуправляемым кодом и на этом идет потеря производительности.
Подробнее тут:
https://blogs.msdn.microsoft.com/mfp...-to-the-metal/
Не уверен, что в вашем случае это было причиной, но про это надо не забывать.
3. В некоторых специфических случаях (при массовой обработке строк) CIL может работать медленнее чем p-code
см:
Помогите найти: Сравнение производительности различных операндов при конкатенации строк
У вас как раз идет работа со строкой.