140

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

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

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

これが C# やその他のコンテキストで何を意味するのか教えてください。

4

1 に答える 1

176

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

例えば:

  • String.Equalsもっている[TargetedPatchingOptOut]
  • を呼び出すプログラムを作成します。String.Equals
  • 最大のパフォーマンスを得るには、このプログラムでNGenを実行します
  • NGen はString.Equals呼び出しをインライン化し、メソッド呼び出し命令をメソッド内の実際のコードに置き換えます。
    メソッド呼び出しは (わずかに) コストがかかるため、頻繁に呼び出されるメソッドのパフォーマンスが向上します。

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

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

于 2011-05-24T11:37:01.763 に答える