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

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

Barbara Streisand
Barbara Streisandオリジナル
2025-01-06 02:16:40887ブラウズ

How to Efficiently Unload Assemblies Loaded with Assembly.LoadFrom()?

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

DLL のロード後に GetTypes() の実行に費やした時間を確認するには、以下の手順に従います。

アンロード中Assemblies

  1. Release References: ロードされた DLL への明示的な参照を解放するには、Assembly オブジェクトを null に設定します。ただし、これはすぐにアンロードされることを保証するものではありません。
  2. Unload AppDomain: DLL をロードするために別のアプリケーション ドメイン (AppDomain) を作成します。時間の測定が完了したら、AppDomain をアンロードして、DLL に関連付けられたリソースを解放できます。これにより、クリーンなアンロードが保証されます。

ガベージ コレクション

ガベージ コレクター (GC) は、未使用のメモリを再利用する役割を果たします。 Assembly オブジェクトを null に設定すると、GC がトリガーされてオブジェクトがコレクションの対象としてマークされますが、メモリがすぐに解放されるとは限りません。

AppDomain を使用した例

次のコードは、その方法を示しています。別の AppDomain にアセンブリをロードし、GetTypes() の時間を測定した後にアンロードします。

// Define the assembly path
string pathToAssembly = @"C:\temp\myassembly.dll";

// Create a new AppDomain
AppDomain dom = AppDomain.CreateDomain("some");

// Load the assembly in the new AppDomain
AssemblyName assemblyName = new AssemblyName();
assemblyName.CodeBase = pathToAssembly;
Assembly assembly = dom.Load(assemblyName);

// Measure the time for GetTypes()
Stopwatch sw = Stopwatch.StartNew();
Type[] types = assembly.GetTypes();
sw.Stop();
double time1 = sw.Elapsed.TotalMilliseconds;

// Unload the AppDomain to release the assembly
AppDomain.Unload(dom);

AppDomain では、ロードされたアセンブリに割り当てられたリソースが確実に解放され、後続のロードおよび GetTypes() 操作のより正確な時間測定が可能になります。

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

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