2008-10-29 19 views
6

Por lo que sé, no hay forma de insinuar el compilador de C# para alinear una función en particular y supongo que es así por diseño.¿Hay alguna manera de aplicar la función en línea en C#?

También creo que no dejar que el programador especificar qué línea y lo que no es generalmente una buena idea, ya que implicaría que cree que eres más inteligente que el compilador JIT (mis sentidos, a las que realmente son) , pero, ¿y 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 objetivo? Hasta el momento no se puede hacer tal cosa y me pregunto si tanto el lenguaje C# como el JIT alguna vez admitirán esta característica.

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

Cualquier luz sobre el tema sería muy apreciada.

Gracias.

Respuesta

10

Respuesta corta: no

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

Criterios para procesos en línea: 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 dos últimos eslabones unos criterios para procesos en línea, la de no estructuras son Inlines esta fuera de fecha; 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

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

Si está ejecutando ese camino rara, romper con su C o ASM.

Cuestiones relacionadas