2011-03-21 8 views

Respuesta

5

Nunca están incluidos en el compilador de C#. Solo const campos son.

Puede echar un vistazo a las optimizaciones del compilador de C# here.

Usted puede asegurarse de que un método o propiedad de acceso es Nunca inline con este atributo que se le aplica:

[MethodImpl(MethodImplOptions.NoInlining)] 
7

No - porque no sucede en tiempo de compilación; sucede en el momento JIT. El compilador de C# no realizará ninguna alineación; Depende de la CLR que el código termine ejecutándose.

puede descubra esto usando cordbg con todas las optimizaciones de JIT activadas, pero necesitará buscar el código de ensamblaje. No sé de ninguna manera de descubrir esto dentro del código. (Es posible que pueda hacerlo con la API del depurador, aunque eso puede deshabilitar algunas líneas internas para comenzar.)

3

Tendría que mirar el código de la máquina. Establezca un punto de interrupción en la llamada al método y, cuando llegue, haga clic con el botón derecho y elija Ir al ensamblaje. Si no ve el enunciado CALL, entonces lo tiene encriptado. Sin embargo, para estar realmente seguro, tendrá que estar un poco más actualizado con el código de la máquina de lectura, es posible que vea una llamada que estaba en el método en línea.

Para hacer esto preciso, tendrá que usar Herramientas + Opciones, Depuración, General, desmarque "Suprimir la optimización de JIT en la carga del módulo". Lo que garantiza que la fluctuación de fase se comporte como lo hace sin el depurador, los métodos no se incluirán cuando el optimizador esté desactivado.

1

Agregue el código dentro del cuerpo del método para examinar el seguimiento de la pila usando StackFrame. En mi experiencia, los métodos en línea se excluyen de este seguimiento de pila.