2012-02-29 2 views
3

私は、 Assembly.LoadFrom(ファイル).GetTypes()...とActivator.CreateInstance(T)を使用してロードされたdllプラグインを使用するオーディオアプリケーションを作成しています。C#プラグインは、Assembly.LoadFrom()...クラスが遅いですか?

私の質問は、読み込みプロセスが遅い場合、初期化時間は重要ではない、プラグインがオーディオ処理ループを内部に持っているかどうかを尋ねています。プラグインを使用して??

+3

を行うにはLoadFromを使用しています。実際はかなりシンプルです。 –

+1

アセンブリ内のILは、ジャストインタイムコンパイラによってマシンコードに変換されます。 1種類のマシンコードがあり、低速版または高速版はなく、ジッタはILがどこから来たかには関係ありません。 –

答えて

2

〜これらのヒントはあなたを助けることができると思います。 これは、DLLの内容が現在のプロセスのメモリにロードされるためです。 メモリにアクセスすると、直接参照された場合と同じパフォーマンスが得られ、CPU時間は直接参照される場合と同じように共有されます。

初期ローディングのみがかなり遅くなります。

この男は両方の方法テストアプリケーションのいくつかのプロファイリングを行い、自分のために見つけるいくつかの素晴らしいものhttp://www.codeproject.com/Articles/4610/Three-Ways-to-Inject-Your-Code-into-Another-Proces

+0

ありがとう男!あなたの説明は素晴らしいです:) – rafael

+0

ありがとう、manky english: – squelos

3

アセンブリがメモリにロードされ、 "Activator.CreateInstance(T)"メソッドを使用してインスタンス化されると、アセンブリのパフォーマンスは直接参照と変わらないはずです。

+0

プラグインは直接参照しません。活性化されたことによって – Ryan

+0

はインスタンス化されました。 :) – Developer

+0

ライセンス認証によって正確にはどういう意味ですか? (Activator.CreateInstace()を使用して)そのアセンブリから型のインスタンスを作成しますか?あなたの答えからはそれほど明確ではないからです。 – svick

0

これは奇妙に思える...

アセンブリがロードされると、何も違いはありません...

だから、私は、これらに診断することをお勧め:

  1. がにロードされたアセンブリです同じアプリケーションドメインですか?
  2. ロードしたアセンブリは、デバッグモードまたはリリースモードでコンパイルされますか?
  3. リフレクションはパフォーマンスに悪影響を与えるため、リフレクションアクションを確認してください
  4. アセンブリをチェックします.Netランタイムバージョンは、パフォーマンスの問題が横に並んで発生しますか?

私はあなたのDLLの内容をロードした後、あなたはそれへの直接参照を使用していたかのように、パフォーマンスは同じでなければなりません

関連する問題