2009-08-04 12 views
6

可能性の重複:別々のAppDomainに.NETアセンブリをロードするための適切な方法をある何
Loading DLLs into a separate AppDomainC#の - 別のAppDomainに.NETアセンブリをロードするには、あなたはアンロードできるので

あなたはその型/クラスにアクセスすることができますが、それでもそれをアンロード(そしてリロード)することができます。

これは、この前の議論の接線である: C# - Correct Way to Load Assembly, Find Class and Call Run() Method

答えて

3

基本的に、あなただけの新しいアプリケーションドメインを作成し、タイプを作成するAppDomain.CreateInstanceAndUnwrapを呼び出します。このプロセスについて簡単なのはCodeProject articleです。

ここにいくつかのトリックがあります。型を直接参照することはできません(現在のAppDomainに型をロードします)。オブジェクトはすべてMarshallByRefObjから派生する必要があります。これにより、オブジェクトを「リモート」で使用できるようになります。つまり、AppDomainにロードされないようにします。

+0

+1ありがとうございます。 AppDomainsを通過するたびにパフォーマンスのペナルティはどれくらい悪いですか? – BuddyJoe

+1

それは異なります。 appdomains間を通過するものは基本的にはシリアル化されています。 (これはRemotingと非常によく似ています)。一般的に、すべての型がMarshallByRefObjから派生している場合、「ハンドル」をシリアル化するだけなので、かなり高速です。データを読み込むと、データはシリアライズされますが、少し遅くなる可能性があります。 2番目のappdomainには常に「内部」を保つようにしてください。おそらくそれは問題ではありません。 –

+0

リモートインスタンスの存続期間には制限があることにも注意してください。 .Netバージョンによっては、リモート処理の代わりにWCFを使用する必要があります。 – Guillaume

関連する問題