ページ

2009年5月28日木曜日

[.NET] .NET Framework 4.0 での NGen の進化

Improvements to NGen in .NET Framework 4 より
FX 3.5 SP1 で NGen がメジャーチェンジしていたそうです。
その内容については MSDN Magazine の 「CLR Inside Out: CLR Optimizations In .NET Framework 3.5 SP1」 にあるとのこと。
この記事は日本語訳もあります。「CLR 徹底解剖: .NET Framework 3.5 SP1 の CLR の最適化

この MSDN Magazine の記事によると FX 3.5 SP1 で起動パフォーマンスがかなり向上したとのことですが、ブログの記事によると FX 4 でも起動パフォーマンスの向上を行っているようです。
NGen 関連の改良のようですが、”Best of all, you don’t have to do anything to get these benefits ? they’ll happen automatically when you use .NET 4.” とあります。
これは、「これらの利益を受けるのに何もする必要はないよ。.NET 4 を使うだけでいい」 という意味だと思うんですがあってるかなぁ?
だとすると、NGen.exe を使って自分でどうこうしておかなくちゃいけないとかそういうものではなく、勝手に起動パフォーマンスが良くなるってことですね。
(すべてのアセンブリが自動的に NGen されるようになったというわけじゃないと思うんだけど、どうなんだろう?大量のベースクラスライブラリや GAC に入っているアセンブリが NGen されてるから自然とすべての人に恩恵があるってことなのかな?ちょっとこの辺がよくわからない)

で、ブログの記事では 4つの NGen の進化について書かれています。

  • NGen SxS: CLR が SxS になったので NGen も SxS になった。
  • Multi-proc NGen: NGen がマルチコア/マルチプロセッサを使うようになった。
  • Targeted Patching: 今まではあるアセンブリが変更されるとそれを使用していたすべてのアセンブリを NGen しなおす必要があった。これを、変更が外部に影響しない (メソッドの中が変わっただけでインターフェースは変わっていないなど) 場合は NGen しなおさないようにした、ということみたい。
  • No NGen in partial trust: 今までは部分信頼でもロードできて実行できるイメージを作ってたけど、部分信頼なんて必要無さそうなので FX4 では止めた。もし、部分信頼が必要だっていう人がいたら教えて。といったことが書かれてるみたいだけど、正直この “No NGen in partial trust” の部分については意味が良くわからない。

0 件のコメント:

コメントを投稿