C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: .NetのDLLロードと.Netのバージョン


(過去ログ 80 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■47292 / inTopicNo.1)  .NetのDLLロードと.Netのバージョン
  
□投稿者/ LeeKang (1回)-(2010/02/24(Wed) 23:01:15)

分類:[.NET 全般] 

はじめまして。
.NetのDLLロードのタイミングに関して質問があります。



1)あるアプリが3つの.NetのDLLを参照していた場合、
それぞれいつロードされるのでしょうか?
「起動時ではなく、実行時、初めてDLL内の対象のクラスがnewされる時、Loadされる」
という認識で良いでしょうか?

正しい場合、
「プロジェクトの参照設定で追加されているアセンブリは、
 実行時にLoadされるので、無駄なアセンブリの参照はしない方が良い」
というのは間違った情報という事で良いでしょうか?


2)100個のクラスを保持しているDLLがあるとします。
この中で、Exeが頻繁に使うものは10個程度だとした場合、

・10個と90個でDLLを分けた場合
・100個でDLLとしている場合

この2つでExeパフォーマンスの違いはありますか?

3)プロジェクトの設定は.Net 3.5を使う設定をしているが、
実際、単純なFormアプリ(.Net 2.0の部分でまかなえる)の場合、
3.5の場合と2.0を設定した場合で、メモリの使用量は変わりますか?
(使っていない3.5のライブラリはロードされてしまうのか?)


以上よろしくおねがいします。
引用返信 編集キー/
■47293 / inTopicNo.2)  Re[1]: .NetのDLLロードと.Netのバージョン
□投稿者/ 囚人 (478回)-(2010/02/24(Wed) 23:23:25)
>「起動時ではなく、実行時、初めてDLL内の対象のクラスがnewされる時、Loadされる」

Yes


>「プロジェクトの参照設定で追加されているアセンブリは、
 実行時にLoadされるので、無駄なアセンブリの参照はしない方が良い」

ちょっと意味が分からないですが(実行時いLoadのくだりと無駄のくだりが矛盾してる気がする)、無駄(?)な参照してても大して変わらないです。
参照している側にせいぜい参照情報がほんの少し入るだけです(もしかしたら、参照先アセンブリの型を使っていなかったら、コンパイラはそれすら入れないかも)。


>この2つでExeパフォーマンスの違いはありますか?

あります。
必要になるまでアセンブリはロードされないので、分割した方がワーキングセットが減っているタイミングが実行時間中にあります。
ちなみに、滅多に使われる手法ではありませんが、マルチモジュールアセンブリ(マルチファイルアセンブリ)という手法があり、一つのアセンブリで頻繁に使われる型とそれ以外のファイルを分ける事ができます。


>3.5の場合と2.0を設定した場合で、メモリの使用量は変わりますか?

3.5 で追加されたものを使用していないなら、どちらでも殆ど変わらないと思います。


参考
http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_index/index.html

http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0Microsoft-Framework-%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%BD%E3%83%95%E3%83%88%E5%85%AC%E5%BC%8F%E8%A7%A3%E8%AA%AC%E6%9B%B8-Jeffery-Richter/dp/4891003030

引用返信 編集キー/
■47366 / inTopicNo.3)  Re[2]: .NetのDLLロードと.Netのバージョン
□投稿者/ LeeKang (2回)-(2010/02/28(Sun) 00:48:28)
遅れましたが、回答ありがとうございました。

非常に参考になりました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -