やじゅ@アプリケーション・ラボ わんくま支局

目次

Blog 利用状況

ニュース

プロフィール

MSMVP

2008年10月10日 #

.Netにおける、動的DLLの解放について

ごくたまに、@ITでも回答するようになったのですが、この質問者さんは結果をきちんと返して頂いたので好感がもてます。

件名:動的DLLの解放について
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=46665&forum=7
【質問内容】
①EXEを実行(EXEは24h常駐です。)
②動的にDLLをロード・実行し、DLLの処理終了(EXEは終了しない。)
③DLLのPGを改訂し、実行環境にコピーすると、エラーMSGがでる。
 「○○.dllをコピーできません。他の人またはプログラムによって使用され
ています。ファイルを使用している可能性があるプログラムを全て閉じてから、やり直してください。」

EXEを24h常駐させ、実行条件によって、ロードするDLLを変更したいと考えています。

【回答】
.NETでは、Win32の時のFreelibrary関数(DLLを呼び出しプロセスの アドレス空間から切り離す)のようなものはなく、一旦DLLを ロードしたらプロセスを終了するまでメモリに残り続けます。
(通常のDefault AppDomainにロードされている場合において)



あえて、動的にする場合は、CreateDomainにて、User AppDimainを作成し、そこにアセンブリをロードして実行、終了時にAppDimainをUnloadすることで、動的にアセンブリを解放することが出来るようになります。

posted @ 2:23 | Feedback (16)