web-dev-qa-db-ja.com

TargetedPatchingOptOut:「NGenイメージの境界を越えたインラインに重要なパフォーマンス」

リフレクターを使用していくつかのフレームワーククラスを通過し、多くのメソッドとプロパティに次の属性があることに気付きました

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]

上記のコメントもどこかで見たことがあり、フォローアップしたことはないと確信しています。

誰かがこれがC#や他の文脈で何を意味するのか教えてもらえますか?

140

NGenに、別のアセンブリであっても適用されたメソッドをインライン化してもよいことを伝えます。

例えば:

  • String.Equalsには[TargetedPatchingOptOut]があります
  • String.Equalsを呼び出すプログラムを作成します
  • 最大のパフォーマンスを得るには、このプログラムで NGen を実行します
  • NGenはString.Equals呼び出しをインライン化し、メソッド呼び出し命令をメソッド内の実際のコードに置き換えます。
    メソッド呼び出しは(少し)高価なので、これは頻繁に呼び出されるメソッドのパフォーマンスを向上させます。

ただし、MicrosoftがString.Equalsにセキュリティホールを見つけた場合、mscorlib.dllを更新することはできません。これは、NGenが実行したアセンブリに影響しないためです。 (String.Equalsを参照しない生のマシンコードがあるため)。
実際にそれが発生した場合、セキュリティ更新プログラムによりNGenストアがクリアされると思います。

この属性は、.NET Frameworkアセンブリでのみ有用であることに注意してください。自分では必要ありません。詳細については、こちらをご覧ください: https://stackoverflow.com/a/14982340/631802

176
SLaks