への最初の呼び出しでCoCreateInstance
は、.NET ランタイムをプロセスにロードして初期化する必要があります。次に、DLL をロードして「検証」し、マシン コードにコンパイルする必要があります (ただし、ジャスト イン タイムは起動の高速化に大いに役立ちます)。.NET ランタイムは、アセンブリのメタデータを解析し、「COM 呼び出し可能ラッパー」( http://msdn.microsoft.com/en-us/library/f07c8z1c.aspx ) を動的に生成してコンパイルする必要もあります。アンマネージド COM ワールドとマネージド .NET ランタイムの間を橋渡しするプロキシ。コードが使用する可能性のある追加のライブラリも、ロードして検証し、場合によってはマシン コードにコンパイルする必要があります (NGEN 化されていない場合)。
これは本質的に高価なプロセスです。あなたが言及した遅延は前例のないものではありません。
物事をスピードアップするためにできることはあまりないと思います。起動後すぐにオブジェクトを作成することで、プログラムの有効期間の早い段階で打撃を受けることができるかどうかを検討することをお勧めします。速度は向上しませんが、ユーザー エクスペリエンスが劇的に向上する可能性があります。プログラムが遅延を許容できない場合は、.NET を使用して COM オブジェクトを記述しないでください (具体的には、プロセスで .NET を使用しないでください。これは、COM を使用することの問題ではありません。 .NET の読み込みに関する問題)
ちなみに、これが.NETでシェル拡張機能を書くことが...「非常に推奨されない」理由の1つです。.NET の起動パフォーマンスについても触れている、この件に関する最近の投稿を参照してください: http://blogs.msdn.com/b/oldnewthing/archive/2013/02/22/10396079.aspx
(そのため、実行しているクライアントの種類を先に尋ねました。既に .NET マネージ コードを実行しているクライアントは .NET ランタイムに依存しており、これらの遅延の影響を受けません)