特定の型から派生した型を見つけるメソッドにパフォーマンス上の問題があります。リフレクションを使用して、現在読み込まれているすべてのアセンブリを取得し ( AppDomain.CurrentDomain.GetAssemblies()
)、各アセンブリのすべての型を反復処理して ( Assembly.GetTypes()
)、一致するものを探します。これは、.NET アプリケーションで使用できる別の DLL で実装されますが、COM にも表示され、VB6 アプリケーションから呼び出すことができます。
この方法は非常にうまく機能し、多くの場合にうまく機能します。私の問題は、場合によっては、アセンブリ System.Data.Entity の GetTypes 呼び出しに非常に長い時間がかかり、5 秒以上かかることです。主な所見は次のとおりです。
- GetTypes の呼び出しに時間がかかるのは常に System.Data.Entity であり、別のアセンブリではありません。読み込まれた他の 50 個のアセンブリで GetTypes 呼び出しが行われる場合がありますが、それらはすべて瞬時に終了します。
- メソッドが .NET アプリケーション (.NET コンソール アプリケーションなど) 内から呼び出された場合、このパフォーマンスの問題は発生しません。GetTypes 呼び出しは、常に瞬時に終了します。
- COM 経由で DLL を使用する VB6 アプリケーション内からメソッドが呼び出されると、問題が頻繁に発生しますが、常に発生するわけではありません。まだわかりませんが、5 秒以上の時間遅延が発生する場合と発生しない場合があります。
最小限のテスト アプリケーションで上記の観察結果を正常に検証したので、今述べた以上のことは何もありません。
この問題の原因は何なのか、私にはわかりません。誰にもアイデアがありますか?
よろしく、ピーター。