Optimización y depuración JITJIT Optimization and Debugging

Cómo funcionan las optimizaciones en. NET: si está intentando depurar el código, resulta más sencillo al que el código está no optimizado.How optimizations work in .NET: If you are trying to debug code, it is easier when that code is NOT optimized. Esto es porque cuando se optimiza el código, el compilador y el tiempo de ejecución realizan cambios en el código emitido de CPU para que se ejecute más rápido, pero tiene una asignación menos directa al código fuente original.This is because when code is optimized, the compiler and runtime make changes to the emitted CPU code so that it runs faster, but has a less direct mapping to original source code. Esto significa que los depuradores son con frecuencia no se puede indicar el valor de las variables locales y desplazarse por el código y los puntos de interrupción no funcionen como esperaba.This means that debuggers are frequently unable to tell you the value of local variables, and code stepping and breakpoints might not work as you expect.

Normalmente, la configuración de compilación de lanzamiento crea código optimizado y la configuración de compilación de depuración no lo hace.Normally the Release build configuration creates optimized code and the Debug build configuration does not. El Optimize propiedad de MSBuild controla si se le indica al compilador que optimice el código.The Optimize MSBuild property controls whether the compiler is told to optimize code.

En el ecosistema de. NET, se activa código de origen de instrucciones de CPU de un proceso de dos pasos: en primer lugar, el compilador de C# convierte el texto que escriba en un formato binario intermedio llamado MSIL y se escribe en archivos .dll.In the .NET ecosystem, code is turned from source to CPU instructions in a two-step process: first, the C# compiler converts the text you type to an intermediate binary form called MSIL and writes this out to .dll files. Más adelante, el tiempo de ejecución de .NET convierte este MSIL en instrucciones de CPU.Later, the .NET Runtime converts this MSIL to CPU instructions. Ambos pasos pueden optimizar hasta cierto punto, pero el segundo paso realizado por el Runtime de .NET realiza las optimizaciones más importantes.Both steps can optimize to some degree, but the second step performed by the .NET Runtime performs the more significant optimizations.

La opción 'Suprimir optimización JIT cargar el módulo (solo administrado)': el depurador expone una opción que controla lo que ocurre cuando se carga un archivo DLL que se compila con las optimizaciones habilitadas dentro del proceso de destino.The 'Suppress JIT optimization on module load (Managed only)' option: The debugger exposes an option that controls what happens when a DLL that is compiled with optimizations enabled loads inside of the target process. Si esta opción está desactivada (el estado predeterminado), a continuación, cuando el tiempo de ejecución de .NET se compila el código MSIL en código de CPU, deja las optimizaciones habilitadas.If this option is unchecked (the default state), then when the .NET Runtime compiles the MSIL code into CPU code, it leaves the optimizations enabled. Si la opción está activada, el depurador solicita que se ha deshabilitado las optimizaciones.If the option is checked, then the debugger requests that optimizations be disabled.

El Suprimir optimización JIT cargar el módulo (solo administrado) opción puede encontrarse en el General página en el depuración nodo en el opciones cuadro de diálogo.The Suppress JIT optimization on module load (Managed only) option can be found on the General page under the Debugging node in the Options dialog box.

Cuándo se debe comprobar esta opción: Active esta opción si ha descargado los archivos DLL de otro origen, como un paquete de nuget, y desea depurar el código de este archivo DLL.When should you check this option: Check this option when you downloaded the DLLs from another source, such as a nuget package, and you want to debug the code in this DLL. En orden para que funcione, también debe buscar el archivo de símbolos (.pdb) para este archivo DLL.In order for this to work, you must also find the symbol (.pdb) file for this DLL.

Si solo está interesado en depurar el código que se va a compilar localmente, es mejor dejar esta opción no está activada, como, en algunos casos, si se habilita esta opción se retrasan significativamente la depuración.If you are only interested in debugging the code you are building locally, it is best to leave this option unchecked, as, in some cases, enabling this option will significantly slow down debugging. Hay dos razones para Esto ralentizará:There are two reason for this slow down:

  • El código optimizado se ejecuta con mayor rapidez.Optimized code runs faster. Si desactiva las optimizaciones para una gran cantidad de código, puede sumar el impacto en el rendimiento.If you are turning off optimizations for lots of code, the performance impact can add up.
  • Si tiene sólo mi código habilitado, el depurador ni siquiera se intente y cargar los símbolos para archivos DLL que se optimizan.If you have Just My Code enabled, the debugger will not even try and load symbols for DLLs that are optimized. Buscar símbolos puede tardar mucho tiempo.Finding symbols can take a long time.

Limitaciones de esta opción: hay dos situaciones en las que esta opción realizará no de trabajo:Limitations of this option: There are two situations where this option will NOT work:

  1. En situaciones donde se va a adjuntar el depurador a un proceso ya se está ejecutando, esta opción tendrá ningún efecto en los módulos que ya estaban cargados en el momento en que se asocia el depurador.In situations where you are attaching the debugger to an already running process, this option will have no effect on modules that were already loaded at the time the debugger was attached.
  2. Esta opción no tiene ningún efecto en las DLL que se han compilado previamente (conocidos también como con Ngen) a código nativo.This option has no effect on DLLs that have been pre-compiled (a.k.a ngen'ed) to native code. Sin embargo, puede deshabilitar el uso del código compilado previamente, inicie el proceso con el entorno de que variable 'COMPlus_ZapDisable' establecida en '1'.However, you can disable usage of pre-compiled code by starting the process with the environment variable 'COMPlus_ZapDisable' set to '1'.

Vea tambiénSee Also

Depurar código administrado Debugging Managed Code
Desplazarse por el código con el depurador Navigating through Code with the Debugger
Adjuntar a procesos en ejecución Attach to Running Processes
Proceso de ejecución administradaManaged Execution Process