我正在为 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++ 中托管代码和非托管代码之间的“上下文切换”成本较少,但我错了吗?由于我认为使用 CodeModel 在 C++ 中的托管代码和非托管代码之间反复切换,我的速度有所放缓,所以我假设托管 C++ 会更快是正确的吗?