4

合計 2 つの個別の .NET アプリ と がFoo.exeありBoo.exe、どちらもTestLib.dllFoo と Boo (2 つのコピー) の bin フォルダーにある同じライブラリを使用しているとします。

.NET はこれらの dll の両方をロードしてsize_of_dll * 2RAM のサイズを浪費しますか?それとも、強力なアセンブリ名、サイズなどをチェックし、2 つのアセンブリのうちの 1 つだけをロードしてロードしますか?

4

5 に答える 5

2

これを 2 つの .net 4.0 プロジェクト、1 つのクラス ライブラリ、および Process Explorer でテストしました。デフォルトでは、Visual Studio は参照された dll をプロジェクトのbinディレクトリにコピーします。

Process Explorer は、参照された dll に対して 2 つの異なるアドレスを返しますが、他の Windows 固有のライブラリに対しては同じアドレスを返します。

結論: はい、同じライブラリの 2 つのコピーが異なるフォルダーにあり、2 つのアプリケーションによって読み込まれた場合、同じライブラリが 2 回読み込まれる可能性があります。

于 2013-05-20T16:34:10.613 に答える
0

アセンブリのコードがプロセスごとに 1 回読み込まれるか、ネイティブ dll のようにプロセス間で共有されるかを尋ねていると思います。主な理由は、コードがネイティブではなく、JIT でなければならないためです。ジッティングはプロセスごとに発生します。Pre-jitted アセンブリ (ngen) はコードを共有できます。

于 2013-05-20T16:24:53.727 に答える