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 ++の方が高速であると想定して正しいですか?