2012-10-01 26 views
5

Me gustaría entender qué tan ubicua puede ser la alineación de JIT.¿Es posible que JIT inline inserte mi código en algún código de ensamblado en tiempo de ejecución de .NET?

Supongamos en mi código que llamo a alguna función del ensamblaje say System.IO y paso una referencia de devolución de llamada a una función implementada en mi código para llamar desde dentro de esa función System.IO. En mi función hay GetCallingAssembly() llamada. Entonces, si mi devolución de llamada entra en System.IO, la llamada al GetCallingAssembly() que originalmente estaba en mi código y que pretendía decir que el método "actual" se llama desde el interior System.IO dirá que ahora se llama desde mi código.

¿Es posible tal alineación o los ensamblados de tiempo de ejecución .NET son tratados de forma diferente de modo que la inserción JIT del código de usuario en el código de tiempo de ejecución de .NET no está permitida?

+1

¿Cómo se volverá a incorporar una retrollamada delegada al callback-invocador? No estoy seguro de que tenga sentido ...? Según entiendo, la creación de líneas se limita a escenarios en los que el código que se invoque sea ** comprobable **, es decir, una llamada estática o una llamada virtual a un método no virtual. –

+0

@Mark Gravel: ¿Por qué no podría hacerlo si se sabe que es la única invocación del invocador de devolución de llamada en todo el programa? – sharptooth

+0

I * sospecho * que es más esfuerzo de entender que el JIT nunca va a hacer, especialmente porque existe reflexión/metaprogramación (lo que significa que podrían existir nuevos usuarios) –

Respuesta

3

Puede asumir con seguridad que la devolución de llamada no estará en línea. Los ensamblados de .NET Framework siempre son preconfigurados por ngen.exe en el momento de la instalación, no hay opción para modificar ese código posteriormente. Además, las devoluciones de llamadas a través de un delegado nunca se incluyen, incluso si el optimizador de fluctuación de fase puede deducir cuál podría ser el método de destino del delegado.

Cuestiones relacionadas