Я создаю расширение для Visual Studio 2008, и поскольку я не хотел писать свой собственный анализатор для C ++ (я не мазохист), я использую VCCodeModel.
Получение простого поля из этих COM-объектов занимает на порядки больше времени, чем любая другая операция, которую я выполняю, и, поскольку я углубляюсь до уровня методов очень больших проектов C ++, у меня эта неэффективность на самых низких уровнях моей рекурсии.
vcCodeBaseFunctions = ((Microsoft.VisualStudio.VCCodeModel.VCCodeElements)
(vcCM.Functions));
int i = 0;
for (i = 1; i <= vcCodeBaseFunctions.Count; i++)
{
if (vcCodeBaseFunctions.Item(i).Kind == vsCMElement.vsCMElementFunction)
parent.AppendChild(MethodWrapper.VCCodeFunctionToXML(
(VCCodeFunction)vcCodeBaseFunctions.Item(i)));
}
Предыдущий код будет перебирать все функции на базовом уровне проекта, преобразовывать их в XML и затем сохранять их. Метод XML будет вызывать несколько полей внутри функции VCCodeFunction, таких как имя, параметры и т. Д.
Управляется ли C ++ быстрее, чем C # для этой цели? У меня неадекватное понимание того, как серверная часть управляемого C ++ отличается от C #, но моя интуиция заставила меня поверить, что затраты на «переключение контекста» между управляемым и неуправляемым кодом в C ++ меньше, но я ошибаюсь? Я получаю значительное замедление от того, что, как я считаю, неоднократно переключается между управляемым и неуправляемым кодом в C ++ с использованием CodeModel, поэтому я прав, полагая, что управляемый C ++ будет быстрее?