3

背景:私の会社では、同じコアdllを使用する多数のアプリケーションを開発しています。これらのdllは、Spring.netのIoCコンテナを使用して接続します(自動配線)。すべてのアプリケーションは同じSpring構成ファイルを使用しており、この構成ファイルは多くの異なるdllの多くのクラスを指しています。ただし、すべてのアプリケーションがすべてのdllの機能を必要とするわけではありません。ただし、IoCコンテナの動作方法により、すべてのdllがSpring.netに読み込まれ、タイプを調べて、実装されているインターフェイスなどを確認します。

主要な質問:実際に使用しているdllをロードする方がよいことを理解しています。しかし、マネージDLLをロードするだけでメモリ使用量が本当に悪いのでしょうか。それとも、最初にdllでクラスを使用していて、最も多くのメモリが使用されているとJITされていますか?

4

4 に答える 4

1

アセンブリのコードがまったく使用されていない場合、最終的には、そのアセンブリのページがメモリからページファイルに移動され、アクティブに使用されているページが優先されます。その場合、全体的な長期的な影響は軽微である可能性があります。ただし、起動時間に悪影響があります。

于 2008-09-16T08:06:36.857 に答える
1

そんなに悪くはないと思います。唯一の問題は、メタデータとメモリの量が大きいため、アプリケーションが使用するアプリケーションの一部が異なるメモリページに配置される可能性が高くなり、パフォーマンスのリークが発生する可能性があることです。この種のものは重要です。

于 2008-09-16T07:42:16.323 に答える
1

本当に悪いのは定量化するのが難しい用語です。物事の規模にもよると思います。一般的に、不要なものの読み込みを避けることができれば、そうすべきだと思います。しかしもちろん、反射を使用して使用できるかどうかを判断する場合は、最初にそれをロードする必要があります...鶏が先か卵が先か。

ただし、アセンブリをアプリケーションドメインにロードすると、そのアプリドメインからアンロードすることはできませんが、動的にアプリドメインを作成してアセンブリをロードし、アプリドメイン全体をアンロードすることは可能です。終わり。

于 2008-09-16T07:43:24.103 に答える
0

もちろん、それらを使用せずに dll をロードすると、ディスクからのアセンブリの読み取りと証拠/セキュリティ チェックにより、起動時間が遅くなります。ただし、メモリが問題になる場合は、アセンブリ内で型を実際に使用しなければ、アセンブリのサイズよりも多くのメモリを浪費することはありません。もちろん、これらの型がスプリング構成で指定されている場合、少なくともそれらの型はメモリにロードされ、静的初期化子 (存在する場合) が実行されます。まれに、これが問題になることがあります。JITing はメソッドごとに CLR によって実行されるため、使用しないメソッドが CPU とメモリを浪費することはありません。

いずれの場合でも、構成ファイルをパーティションに分割できます。たとえば、モジュール A のすべてのオブジェクト定義をファイル moduleA.config に入れ、モジュール B のすべての定義をファイル moduleB.config に入れ、特定のアプリケーションに本当に必要なモジュールのみを指定します。

hth、エーリッヒ

PS: また、Spring for .NET 関連の質問をコミュニティ フォーラムに投稿することをお勧めします。質問の回答がそこで得られる可能性が高くなります。

于 2009-01-04T15:05:32.580 に答える