ホームページ >バックエンド開発 >C++ >Assembly.LoadFrom() でロードされたアセンブリを明示的にアンロードするにはどうすればよいですか?

Assembly.LoadFrom() でロードされたアセンブリを明示的にアンロードするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-04 09:41:35370ブラウズ

How Can I Explicitly Unload Assemblies Loaded with Assembly.LoadFrom()?

Assembly.LoadFrom() でロードされたアセンブリのアンロード

DLL のロード後に GetTypes() の実行にかかる時間を確認するためAssembly.LoadFrom() を使用する場合、DLL をアンロードして再ロードする必要がある場合があります。ただし、アセンブリ参照を null に設定するだけでは、アセンブリをアンロードするのに十分ではありません。

アセンブリの明示的なアンロード

アセンブリを明示的にアンロードするには、AppDomain.Unload を使用できます。 () 方法。以下に例を示します。

// Create a separate AppDomain to load the assembly
AppDomain dom = AppDomain.CreateDomain("some");

// Load the assembly into the new AppDomain
Assembly assembly = dom.LoadFrom(filePath);

// Get the types from the assembly
Type[] types = assembly.GetTypes();

// Unload the AppDomain, which will unload the assembly
AppDomain.Unload(dom);

AppDomain をアンロードすると、アセンブリとそのすべてのリソースがガベージ コレクターによって再利用されます。

ガベージ コレクターの使用

アセンブリ参照を null に設定すると、アセンブリは明示的にアンロードされませんが、ガベージ コレクションの対象になります。ガベージ コレクターは最終的に、Assembly オブジェクトに割り当てられたリソースを再利用し、アセンブリ ファイルはメモリからアンロードされます。

ただし、ガベージ コレクターを明示的に呼び出したり、即時実行を強制したりする方法はありません。これは、システムのアイドル時間に実行されるバックグラウンド プロセスです。したがって、アセンブリを明示的にアンロードする場合は、AppDomain.Unload() を使用することをお勧めします。

以上がAssembly.LoadFrom() でロードされたアセンブリを明示的にアンロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。