Pregunta

Por lo que sé, no hay forma de sugerir que el compilador c # incluya una función en particular y creo que es así por diseño.

También creo que no permitir que el programador especifique qué en línea y qué no es generalmente una buena idea, ya que implicaría que piensas que eres más inteligente que el compilador JIT (mis respetos a quienes realmente lo son), pero, ¿qué sucede si quisiera especificar que una parte crítica del código debe ser extremadamente rápida a cualquier costo, sin importar cómo lograrlo en la máquina de destino? Hasta el momento no puede hacer tal cosa y me pregunto si tanto el lenguaje c # como el JIT soportarán esta función.

En mi caso, sé cuál es la máquina de destino y sé que la función de incorporación en línea ayudará a mejorar el rendimiento. Esto me hace pensar que la única forma de imponer la función de incorporación en línea es saber en qué circunstancias lo hará el JIT, pero tampoco creo que sea una buena idea,

Cualquier luz sobre el tema sería muy apreciada.

Gracias.

¿Fue útil?

Solución

La situación ha cambiado un poco con la llegada de .Net 4.5.

Ahora puede decorar un método con el atributo [MethodImplAttribute (MethodImplOptions.AggressiveInlining)] lo que hará que el JIT lo incorpore si es posible.

Consulte este blog para más detalles.

Otros consejos

Respuesta corta: no

Respuesta larga: http: //blogs.msdn. com / ericgu / archive / 2004/01/29 / 64644.aspx

Criterios de inscripción: http: //blogs.msdn .com / davidnotario / archive / 2004/11/01 / 250398.aspx y http://blogs.msdn.com/ericgu/archive/2004/01/29/64717.aspx

Tenga en cuenta que en los últimos dos enlaces sobre los criterios para la inscripción, el de las estructuras que no están en línea está desactualizado; la información actualizada se puede encontrar en: http://blogs.msdn.com/vancem/archive/2008/05/12/what-s-coming-in-net-runtime-performance-in -version-v3-5-sp1.aspx

Hace poco comparto esto:

http://www.gfilter.net/junk/BubblesortBenchmark.jpg (Más alto es peor)

Como puede ver, tanto el CLR como la JVM son mucho mejores en cuanto a la incorporación de métodos de lo que usted será nunca.

if(performance < ACCEPTABLE){
   if(profiler.showsAffectOfMethodCallOverhead() && seriouslyWeDoubleChecked()){
      if(runtimeContext.isReallyStableAndNotProneToChange() && weNeedToGetThisThingBatOutOfHellFast()){
          return thisIsOneOfTheFewTimesWhenANativeExternalFunctionMayBeWorthIt();
      }
   }
 }
 return dontWorryAboutIt();

Si está ejecutando esa ruta rara, divida su C o ASM.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top