3

1000 個の asp.net Web サイトがあり、それぞれの /bin フォルダーに 30 個の DLL があるとします。

したがって、30,000 DLL です。

1 セットの DLL をグローバル アセンブリ キャッシュに登録し、各サイトが GAC で DLL を使用した場合、Web サイト、Web サーバー、またはマシンの実行速度は速くなりますか?

たとえば、Web サイト全体で使用するメモリが少なくなるでしょうか。

4

3 に答える 3

7

アセンブリは GAC にありますが、分離を提供するために、そこから個別にメモリに読み込まれます。つまり、アセンブリが GAC にあるからといって、それらのコピーが AppDomain 間で共有されるわけではありません。mscorlib (およびおそらくいくつかの BCL アセンブリ)は AppDomains 間で共有できると思いますが、あなたや私が作成したアセンブリはそうではありません。

ただし、これは良いことです。キャッシュタイプが AppDomain 間で共有されることの意味を考慮してください。

于 2009-06-03T15:00:43.727 に答える
1

実際には、特に NGEN も使用されている場合、これははるかに高速になります。グローバル アセンブリ キャッシュに配置せずに NGEN を実行すると、CLR がネイティブ イメージと一致することを確認するためにアセンブリの検証を実行する必要があるため、実際には速度が低下します。CLR は、GAC されたアセンブリのこのチェックをスキップし、ネイティブ イメージを単に読み込んで使用します。

コード ページを共有できるため、NGEN 化されたアセンブリにはメモリ上の利点もあります。

また、DLL のベース アドレスを最適化することを検討することもできます。それらがすべてデフォルトを使用している場合、Windows は 30,000 回リベースする必要があるからです。

これは、NGEN のパフォーマンス上の利点に関する素晴らしい記事です。

http://msdn.microsoft.com/en-us/magazine/cc163610.aspx

于 2009-06-03T15:06:05.493 に答える