- - PR -
LoadFromしたら開放する必要がある?
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-09-13 11:38
ASP.NETアプリケーションから呼び出されるライブラリにて、DLLの名前を指定して
Assembly.LoadFrom()でロードしています。 このDLLは、数十〜100以上ぐらいの数が想定されます。 この場合って、MAX100個分のDLLがロードされたままになるのでしょうか? また、なんらかの方法でDLLを開放?する必要があるのでしょうか? | ||||||||
|
投稿日時: 2006-09-13 12:57
数10〜100種類って意味でしょうか?
だとしたらその数分が多分ロードされたままでしょうね。 解放の手段は…なかったように思いますが、無知なだけかも。 1種類を数10回ロードって意味ならちょっと違います。 _________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2006-09-13 13:10
このあたりの都合は、AppDomain からロードされた場合と同じであればそうでしょうね。
LoadFrom メソッドの場合は 1 度呼び出されると同じアセンブリが返されるんでしたね。(たぶん) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-09-13 13:11
>数10〜100種類って意味でしょうか?
はい。そうです。 >だとしたらその数分が多分ロードされたままでしょうね。 >解放の手段は…なかったように思いますが、無知なだけかも。 通常Webアプリからでこのような場合はこうするっていうのが知りたいので 方法がなければないでいいです。 >1種類を数10回ロードって意味ならちょっと違います。 1種類を数10回ではないです。 この場合は、読み込み済みのDLLがロードされて メモリは増えていかないですよね? | ||||||||
|
投稿日時: 2006-09-13 15:22
なってしまいます。
メモリが圧迫されるようなら解放した方がよいです。 が、単純にアセンブリをアンロードすることはできません。 ロードされたアセンブリのイメージをメモリ上から削除するには、アセンブリをロードした AppDomain を廃棄することになります。 | ||||||||
|
投稿日時: 2006-09-13 17:31
AppDomain初耳でした。
ちょっとテストコードを書いてみました。 AppDomainごと、アンロードするとは以下のような感じでしょうか。 Hoge hoge; AppDomain ad = AppDomain.CreateDomain("Test"); try { Assembly assembly = ad.Load("Sample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"); hoge = (Hoge)assembly.CreateInstance("Hoge"); // A } finally { AppDomain.Unload(ad); } plugin.Test(); // B >ロードされたアセンブリのイメージをメモリ上から削除するには、アセンブリをロードした AppDomain を廃棄することになります。 単純に廃棄できないといわれるところから、AppDomainを使用すると それ固有の問題も出てくるということでしょうか。 あと、これをやってしまうと ロード時は、アセンブリの名前だけどロードしようと思っていたのが、FullName(バージョン等あり)での 指定が必要になるようですね。 また、毎回、AppDomainを作成して、毎回ロードしてUnloadするという処理の負荷も気になります。 (もっとも、メモリ圧迫されるぐらいならこちらの方が良いでしょうが) >メモリが圧迫されるようなら解放した方がよいです。 このあたりの兼ね合いで考えようかと思います。 ところで、上記コードのUnload前のAではなく、Bの箇所で処理が呼べてしまったのが ちょっと気になります。(Unloadしたはずなのに) [ メッセージ編集済み 編集者: 頭脳パン 編集日時 2006-09-13 18:15 ] | ||||||||
|
投稿日時: 2006-09-13 18:10
これ。adの意味あるの?AppDomainからロードしてる? 意味わかってねーんじゃない? | ||||||||
|
投稿日時: 2006-09-13 18:17
>これ。adの意味あるの?AppDomainからロードしてる?
>意味わかってねーんじゃない? そう言われるということは、わかっていないようです。 初耳で、ちょっと調べてコードを書いてみたもので。 |