TargetedPatchingOptOut: "Performance critical to inline across NGen image boundaries"?

13,701

It tells NGen that it is OK to inline the method it's applied to even in a different assembly.

For example:

  • String.Equals has [TargetedPatchingOptOut]
  • You write a program that calls String.Equals
  • You run NGen on this program for maximum performance
  • NGen will inline the String.Equals call, replacing the method call instruction with the actual code in the method.
    Method calls are (slightly) expensive, so this is a performance boost for frequently-called methods.

However, if Microsoft finds a security hole in String.Equals, they cannot just update mscorlib.dll, because that won't affect the assembly that you just NGen'd. (Since it has raw machine code without referencing String.Equals).
I assume that if that were to actually happen, the security update would clear the NGen store.

Note that this attribute is only useful in the .NET Framework assemblies. You don't need it in your own. You can find more information about that here: https://stackoverflow.com/a/14982340/631802

Share:
13,701
Maxim Gershkovich
Author by

Maxim Gershkovich

Developer with experience in. ASP.NET Azure Point of sale software C# VB.NET .NET Framework Sharepoint MVC Microsoft Kinect for Windows 1.8 & 2

Updated on July 21, 2022

Comments

  • Maxim Gershkovich
    Maxim Gershkovich almost 2 years

    Been going through some framework classes using reflector and noticed a number of the methods and properties have the following attribute

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

    I'm pretty sure I have also seen the above comment somewhere else and never followed it up.

    Could someone please tell me what this means in the C# and any other context?

  • MattDavey
    MattDavey almost 13 years
    Can we use this attribute in our own frameworks? My open source library has a lot of math functions which would benefit from this...
  • Motti
    Motti over 12 years
    If the .NET framework is patched the existing native image files are invalidated and recreated (at least that's my understanding)
  • The Muffin Man
    The Muffin Man almost 12 years
    This is neat. I never knew about NGen.
  • japf
    japf almost 12 years
    Nice answer, I've seen this for a long time without knowing the purpose.
  • joshperry
    joshperry over 11 years
    @MattDavey public sealed class TargetedPatchingOptOutAttribute : Attribute It is a public class in mscorlib so I don't see why it wouldn't work if you applied it to your own methods.
  • cremor
    cremor over 11 years
    @MattDavey No, you shouldn't use this attribute in your own code. As is written in the MSDN: "This API supports the .NET Framework infrastructure and is not intended to be used directly from your code.". This attribute only affects assemblies that use targeted patching. A longer explanation with some source links can be found here: stackoverflow.com/a/14982340/631802
  • BlueRaja - Danny Pflughoeft
    BlueRaja - Danny Pflughoeft about 11 years
    The fact that all of our code can automatically be inlined across assembly bounds, meaning this attribute is completely useless to us, really needs to be mentioned in the answer...
  • Basic
    Basic over 9 years
    @MattDavey If you want to give the compiler a nudge that your methods should be inlined if possible, use [MethodImpl(MethodImplOptions.AggressiveInlining)]