外部COMコンポーネントを使用するサーバーアプリケーションがありますが、メモリリークが発生しているようです。このコンポーネントのソース、またはデバッグや変更を行う方法がありません。十分な時間が経過すると、サーバーが機能しなくなります。
COM機能をアウトプロセスに移行したいのですが、これは難しいことではありませんが(合格とCLSCTX_LOCAL_SERVER
不合格)、1つの問題があります。サーバーが異なるスレッドからCOMオブジェクトの複数のインスタンスをタイミングを合わせて作成していることです。そのため、アウトプロセスホストをクラッシュさせるのに十分なメモリをリークするのに十分な時間、アクティブなインスタンスが0になるポイントがなくなる可能性があります。CLSCTX_INPROC_SERVER
CoCreateInstance
明らかな解決策は、それぞれCoCreateInstance
が独自のアウトプロセスサーバーを生成するようにすることです。しかし、SOに関する1つの質問を含め、これまでに見たすべてのリソースでは、COMオブジェクトを作成しているDLLのソースにアクセスする必要があるようです。ここではそうではありません。
それでCoCreateInstance
、変更できるのが呼び出しているプログラムのコードだけである場合に、新しいアウトプロセスサロゲートを生成するために各呼び出しを行う方法はありCoCreateInstance
ますか?
(問題のサーバーはDelphiで記述されているため、C ++テンプレートライブラリベースのソリューションは使用しないでください。)