アセンブリをロードしてからアンロードするために、AppDomain を使用しています。
しかし、私は非常に難しい問題を抱えています。AppDomain がアンロードされた後、一部のアセンブリが複数回ロードされていることをプロセス エクスプローラーで確認できます。読み込まれたアセンブリが残っているのはなぜですか? AppDomain.Unload は、AppDomain のロード済みメモリをすべて解放しませんか?
添付の画像で確認できます。
合計 AppDomains は 3 です (プロセスのライフサイクルで 3 つの AppDomains を作成しました)
AppDomains: 1 (現在、AppDomain は 1 つだけ存在します)
そして何らかの理由で、次のロードされた DLL セクションでわかるように、アセンブリはプロセスに複数回ロードされます..
コード:
AppDomain fetcherDomain = AppDomain.CreateDomain("StatusFetcher");
try
{
var fetcher = (LocalStatusFetcher)fetcherDomain.CreateInstanceFromAndUnwrap(Assembly.GetExecutingAssembly().CodeBase, typeof(LocalStatusFetcher).FullName);
//doing some other stuff that is not interesting...
}
finally
{
AppDomain.Unload(fetcherDomain);
}
はい、LocalStatusFetcher は MarshalByRefObject を継承しています...