リフレクターを使用していくつかのフレームワーククラスを調べていたところ、いくつかのメソッドとプロパティに次の属性があることに気付きました。
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
私も上記のコメントをどこかで見たことがあるはずですが、その後はフォローしませんでした。
誰か、これが C# やその他のコンテキストで何を意味するのか教えてもらえませんか?
ベストアンサー1
これは、適用先のメソッドを別のアセンブリ内でもインライン化できることを 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