Le dice a NGen que está bien alinear el método al que se aplica incluso en un ensamblaje diferente.
Por ejemplo:
String.Equals
tiene [TargetedPatchingOptOut]
- se escribe un programa que llama
String.Equals
- Ejecuta NGen en este programa para un máximo rendimiento
- NGen se inline la llamada
String.Equals
, en sustitución de la instrucción de llamada de método con el código real en el método.
Las llamadas a métodos son (un poco) caras, por lo que se trata de un aumento del rendimiento para los métodos llamados con frecuencia.
Sin embargo, si Microsoft encuentra un agujero de seguridad en String.Equals
, no pueden simplemente actualizar mscorlib.dll
, ya que no afectará a la asamblea que acaba de NGen'd. (Dado que tiene código de máquina sin referenciar String.Equals
).
Supongo que si eso realmente sucediera, la actualización de seguridad limpiaría la tienda NGen.
Tenga en cuenta que este atributo solo es útil en los ensamblados de .NET Framework. No lo necesitas en tu propio. Puede encontrar más información al respecto aquí: https://stackoverflow.com/a/14982340/631802
Excelente respuesta, gracias. – crypted
¿Podemos usar este atributo en nuestros propios marcos? Mi biblioteca de código abierto tiene muchas funciones matemáticas que se beneficiarían de esto ... – MattDavey
Si el marco de .NET está parcheado, los archivos de imágenes nativos existentes se invalidan y se vuelven a crear (al menos eso es lo que entiendo) – Motti