2011-05-24 8 views
137

estado pasando por algunas clases de la arquitectura usando reflector y notó una serie de los métodos y las propiedades tienen el siguiente atributoTargetedPatchingOptOut: "El rendimiento es crítico para los límites de la imagen NGen en línea"?

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

estoy bastante seguro de que también he visto el comentario anterior en otro lugar y nunca seguido hacia arriba.

¿Podría alguien decirme qué significa esto en el C# y en cualquier otro contexto?

Respuesta

173

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

+5

Excelente respuesta, gracias. – crypted

+18

¿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

+3

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

Cuestiones relacionadas