TLDRバージョン:は気にしないでください。.NETFrameworkTargetedPatchingOptOutAttribute
アセンブリでのみ使用する必要があります。自己開発されたアセンブリのメソッドインライン化は、NgenおよびJITでも同じように機能します。
他の質問が私を完全に間違った仮定に導いたようです。独自のアセンブリのメソッドは、ハードバインドされておらず、セットがない場合でも、ネイティブのイメージ境界全体にインライン化されます。TargetedPatchingOptOutAttribute
この属性は、.NETFrameworkアセンブリにのみ影響します。
Microsoftのブログ投稿TargetedPatchingOptOutAttribute
には、 :に関する非常に優れたセクションがあります。
「ターゲットパッチ-メソッドにTargetedPatchingOptOutAttributeがありません」-これは、NGENイメージのバージョンの復元力が高いCLR4の新機能に関連しています。一言で言えば、mscorlib.dllにパッチまたは修正を適用できることを望んでおり、それに依存するマシン上の他のすべてのネイティブイメージを再コンパイルする必要はありません。これは、.NET Frameworkクラスライブラリのメソッドにのみ適用されます。これは、この機能をオプトインできる唯一のアセンブリであるためです。
つまり、.NETFrameworkアセンブリは.NET4.0でターゲットパッチをサポートするようになったため、通常、これらのアセンブリのメソッドをインライン化することはできません。ただし、でマークされたメソッドTargetedPatchingOptOutAttribute
はパフォーマンスが重要であるため、対象のパッチをオプトアウトします(つまり、変更された場合は、そのメソッドを使用するすべてのネイティブイメージを再コンパイルする必要があります)。私たち自身のアセンブリはターゲットを絞ったパッチを使用していないため、ネイティブ画像間でメソッドがインライン化されるのを防ぐ理由はありません。
これをテストするために、別のアセンブリでスローされた例外の呼び出しスタックを示す小さなサンプルを作成しました。私のメインメソッドと例外をスローしたメソッドだけが呼び出しスタックにありました。呼び出し元のアセンブリと呼び出されたアセンブリの両方に配置された他のいくつかの小さなメソッド(基本的には次のメソッドを呼び出すだけです)は、呼び出しスタックにありませんでした。この動作は、アセンブリのネイティブイメージを作成した後も変わりませんでした(はい、ネイティブイメージが使用されていることを確認しました)。