Ngen.exe (Generador de imágenes nativas)Ngen.exe (Native Image Generator)

El Generador de imágenes nativas (Ngen.exe) es una herramienta que mejora el rendimiento de las aplicaciones administradas.The Native Image Generator (Ngen.exe) is a tool that improves the performance of managed applications. Ngen.exe crea imágenes nativas, que son archivos que contienen código máquina compilado específicamente para un procesador, e instala estas imágenes en la memoria caché de imágenes nativas del equipo local.Ngen.exe creates native images, which are files containing compiled processor-specific machine code, and installs them into the native image cache on the local computer. El runtime puede usar imágenes nativas de la memoria caché en lugar de usar el compilador Just-In-Time (JIT) para compilar el ensamblado original.The runtime can use native images from the cache instead of using the just-in-time (JIT) compiler to compile the original assembly.

Cambios en Ngen.exe en .NET Framework 4.NET Framework 4:Changes to Ngen.exe in the .NET Framework 4.NET Framework 4:

  • Ahora, Ngen.exe compila los ensamblados con plena confianza y ya no se evalúa la directiva de seguridad de acceso del código (CAS).Ngen.exe now compiles assemblies with full trust, and code access security (CAS) policy is no longer evaluated.

  • Las imágenes nativas que se generan con Ngen.exe ya no se pueden cargar en las aplicaciones que se están ejecutando con confianza parcial.Native images that are generated with Ngen.exe can no longer be loaded into applications that are running in partial trust.

Cambios en Ngen.exe en la versión 2.0 de .NET Framework:Changes to Ngen.exe in the .NET Framework version 2.0:

  • Al instalar un ensamblado, también se instalan sus dependencias, lo que simplifica la sintaxis de Ngen.exe.Installing an assembly also installs its dependencies, simplifying the syntax of Ngen.exe.

  • Ahora, las imágenes nativas se pueden compartir en los dominios de aplicación.Native images can now be shared across application domains.

  • Una nueva acción, update, vuelve a crear las imágenes invalidadas.A new action, update, re-creates images that have been invalidated.

  • Se pueden aplazar las acciones para que las ejecute un servicio que use el tiempo de inactividad del equipo para generar e instalar las imágenes.Actions can be deferred for execution by a service that uses idle time on the computer to generate and install images.

  • Se han eliminado algunas de las causas que provocan la invalidación de imágenes.Some causes of image invalidation have been eliminated.

En Windows 8, consulte Tarea de imagen nativa.On Windows 8, see Native Image Task.

Para más información sobre el uso de Ngen.exe y el servicio de imágenes nativas, vea Servicio de imágenes nativas.For additional information on using Ngen.exe and the native image service, see Native Image Service.

Nota

Puede encontrar información sobre la sintaxis de Ngen.exe para las versiones 1.0 y 1.1 de .NET Framework en Sintaxis heredada del generador de imágenes nativas (Ngen.exe).Ngen.exe syntax for versions 1.0 and 1.1 of the .NET Framework can be found in Native Image Generator (Ngen.exe) Legacy Syntax.

Esta herramienta se instala automáticamente con Visual Studio.This tool is automatically installed with Visual Studio. Para ejecutar la herramienta, utilice el Símbolo del sistema para desarrolladores (o el Símbolo del sistema de Visual Studio en Windows 7).To run the tool, use the Developer Command Prompt (or the Visual Studio Command Prompt in Windows 7). Para más información, consulte Símbolos del sistema.For more information, see Command Prompts.

En el símbolo del sistema, escriba lo siguiente:At the command prompt, type the following:

SintaxisSyntax

ngen action [options]  
ngen /? | /help  

AccionesActions

En la tabla siguiente se muestra la sintaxis de cada acción (action).The following table shows the syntax of each action. Para ver descripciones de los distintos elementos de una action, consulte las tablas Argumentos, Niveles de prioridad, Escenarios y Configuración.For descriptions of the individual parts of an action, see the Arguments, Priority Levels, Scenarios, and Config tables. En la tabla Opciones se describe el parámetro options y los modificadores de ayuda.The Options table describes the options and the help switches.

AcciónAction DescripciónDescription
install [assemblyName | assemblyPath] [scenarios] [config] [/queue[:{1|2|3}]]install [assemblyName | assemblyPath] [scenarios] [config] [/queue[:{1|2|3}]] Genera imágenes nativas para un ensamblado y sus dependencias e instala las imágenes en la memoria caché de imágenes nativas.Generate native images for an assembly and its dependencies and install the images in the native image cache.

Si se especifica /queue, la acción se pone en la cola del servicio de imágenes nativas.If /queue is specified, the action is queued for the native image service. La prioridad predeterminada es 3.The default priority is 3. Consulte la tabla Niveles de prioridad.See the Priority Levels table.
uninstall [assemblyName | assemblyPath] [scenarios] [config]uninstall [assemblyName | assemblyPath] [scenarios] [config] Elimina las imágenes nativas de un ensamblado y sus dependencias de la memoria caché de imágenes nativas.Delete the native images of an assembly and its dependencies from the native image cache.

Para desinstalar una imagen y sus dependencias, use los mismos argumentos de la línea de comandos que usó para instalar la imagen.To uninstall a single image and its dependencies, use the same command-line arguments that were used to install the image. Nota: A partir de .NET Framework 4.NET Framework 4, ya no se admite la acción uninstall *.Note: Starting with the .NET Framework 4.NET Framework 4, the action uninstall * is no longer supported.
update [/queue]update [/queue] Actualiza las imágenes nativas que han dejado de ser válidas.Update native images that have become invalid.

Si se especifica /queue, las actualizaciones se ponen en la cola del servicio de imágenes nativas.If /queue is specified, the updates are queued for the native image service. Las actualizaciones siempre se programan con una prioridad de 3, por lo que se ejecutan cuando el equipo se encuentra inactivo.Updates are always scheduled at priority 3, so they run when the computer is idle.
display [assemblyName | assemblyPath]display [assemblyName | assemblyPath] Muestra el estado de las imágenes nativas para un ensamblado y sus dependencias.Display the state of the native images for an assembly and its dependencies.

Si no se proporciona ningún argumento, se muestra todo el contenido de la memoria caché de imágenes nativas.If no argument is supplied, everything in the native image cache is displayed.
executeQueuedItems [1|2|3]executeQueuedItems [1|2|3]

O bien-or-

eqi [1|2|3]eqi [1|2|3]
Ejecuta los trabajos de compilación en cola.Execute queued compilation jobs.

Si se especifica una prioridad, se ejecutan los trabajos de compilación con una prioridad mayor o igual a la especificada.If a priority is specified, compilation jobs with greater or equal priority are executed. Si no se especifica ninguna prioridad, se ejecutan todos los trabajos de compilación en cola.If no priority is specified, all queued compilation jobs are executed.
queue {pause | continue | status}queue {pause | continue | status} Pausa el servicio de imágenes nativas, permite la reanudación del servicio en pausa o consulta el estado del servicio.Pause the native image service, allow the paused service to continue, or query the status of the service.

ArgumentosArguments

ArgumentoArgument DescripciónDescription
assemblyName El nombre para mostrar completo del ensamblado.The full display name of the assembly. Por ejemplo: "myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5".For example, "myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5". Nota: Puede proporcionar un nombre de ensamblado parcial, como myAssembly, para las acciones display y uninstall.Note: You can supply a partial assembly name, such as myAssembly, for the display and uninstall actions.

Solo se puede especificar un ensamblado por cada línea de comandos de Ngen.exe.Only one assembly can be specified per Ngen.exe command line.
assemblyPath La ruta de acceso explícita del ensamblado.The explicit path of the assembly. Se puede especificar una ruta de acceso completa o relativa.You can specify a full or relative path.

Si se especifica un nombre de archivo sin una ruta de acceso, el ensamblado deberá estar ubicado en el directorio actual.If you specify a file name without a path, the assembly must be located in the current directory.

Solo se puede especificar un ensamblado por cada línea de comandos de Ngen.exe.Only one assembly can be specified per Ngen.exe command line.

Niveles de prioridadPriority Levels

PrioridadPriority DescripciónDescription
1 Las imágenes nativas se generan e instalan de forma inmediata, sin esperar al tiempo de inactividad.Native images are generated and installed immediately, without waiting for idle time.
2 Las imágenes nativas se generan e instalan sin esperar al tiempo de inactividad, pero después de que se hayan completado todas las acciones de prioridad 1 (y sus dependencias).Native images are generated and installed without waiting for idle time, but after all priority 1 actions (and their dependencies) have completed.
3 Las imágenes nativas se instalan cuando el servicio de imágenes nativas detecta que el equipo se encuentra inactivo.Native images are installed when the native image service detects that the computer is idle. Vea Servicio de imágenes nativas.See Native Image Service.

EscenariosScenarios

EscenarioScenario DescripciónDescription
/Debug Genera imágenes nativas que pueden usarse con un depurador.Generate native images that can be used under a debugger.
/Profile Genera imágenes nativas que pueden usarse con un generador de perfiles.Generate native images that can be used under a profiler.
/NoDependencies Genera el número mínimo de imágenes nativas requerido por las opciones de escenario especificadas.Generate the minimum number of native images required by the specified scenario options.

ConfiguraciónConfig

ConfiguraciónConfiguration DescripciónDescription
/ExeConfig: exePath/ExeConfig: exePath Usa la configuración del ensamblado ejecutable especificado.Use the configuration of the specified executable assembly.

Ngen.exe tiene que tomar las mismas decisiones que el cargador al enlazarse a las dependencias.Ngen.exe needs to make the same decisions as the loader when binding to dependencies. Cuando se carga un componente compartido en tiempo de ejecución usando el método Load, el archivo de configuración de la aplicación determina las dependencias que se cargan para el componente compartido como, por ejemplo, la versión que se carga de una dependencia.When a shared component is loaded at run time, using the Load method, the application's configuration file determines the dependencies that are loaded for the shared component — for example, the version of a dependency that is loaded. El modificador /ExeConfig proporciona a Ngen.exe orientación sobre las dependencias que se cargarán en tiempo de ejecución.The /ExeConfig switch gives Ngen.exe guidance on which dependencies would be loaded at run time.
/AppBase: directoryPath/AppBase: directoryPath Al buscar dependencias, usa el directorio especificado como base de la aplicación.When locating dependencies, use the specified directory as the application base.

OpcionesOptions

OpciónOption DescripciónDescription
/nologo Suprime la presentación de la pancarta de inicio de Microsoft.Suppress the Microsoft startup banner display.
/silent Suprime la presentación de mensajes de operaciones correctas.Suppress the display of success messages.
/verbose Muestra información detallada para la depuración.Display detailed information for debugging. Nota: Debido a las limitaciones de los sistemas operativos, esta opción no muestra tanta información adicional en Windows 98 y Windows Millennium Edition.Note: Due to operating system limitations, this option does not display as much additional information on Windows 98 and Windows Millennium Edition.
/help, /?/help, /? Muestra las opciones y la sintaxis de los comandos de la versión actual.Display command syntax and options for the current release.

ComentariosRemarks

Para ejecutar Ngen.exe, es necesario disponer de privilegios administrativos.To run Ngen.exe, you must have administrative privileges.

Precaución

No ejecute Ngen.exe en ensamblados que no son de plena confianza.Do not run Ngen.exe on assemblies that are not fully trusted. A partir de .NET Framework 4.NET Framework 4, Ngen.exe compila los ensamblados con plena confianza y ya no se evalúa la directiva de seguridad de acceso del código (CAS).Starting with the .NET Framework 4.NET Framework 4, Ngen.exe compiles assemblies with full trust, and code access security (CAS) policy is no longer evaluated.

A partir de .NET Framework 4.NET Framework 4, las imágenes nativas que se generan con Ngen.exe ya no se pueden cargar en las aplicaciones que se están ejecutando con confianza parcial.Starting with the .NET Framework 4.NET Framework 4, the native images that are generated with Ngen.exe can no longer be loaded into applications that are running in partial trust. En su lugar, se invoca el compilador Just-In-Time (JIT).Instead, the just-in-time (JIT) compiler is invoked.

Ngen.exe genera imágenes nativas para el ensamblado que el argumento assemblyname especifica para la acción install y todas sus dependencias.Ngen.exe generates native images for the assembly specified by the assemblyname argument to the install action and all its dependencies. Las dependencias se determinan a partir de las referencias del manifiesto del ensamblado.Dependencies are determined from references in the assembly manifest. El único escenario en el que es necesario instalar una dependencia por separado es aquel donde la aplicación carga la dependencia usando la reflexión, por ejemplo, llamando al método Assembly.Load.The only scenario in which you need to install a dependency separately is when the application loads it using reflection, for example by calling the Assembly.Load method.

Importante

No use el método Assembly.LoadFrom con imágenes nativas.Do not use the Assembly.LoadFrom method with native images. Una imagen cargada con este método no la podrán usar otros ensamblados en el contexto de ejecución.An image loaded with this method cannot be used by other assemblies in the execution context.

Ngen.exe mantiene un recuento de las dependencias.Ngen.exe maintains a count on dependencies. Por ejemplo, suponga que MyAssembly.exe y YourAssembly.exe están instalados en la memoria caché de imágenes nativas y que ambos tienen referencias a OurDependency.dll.For example, suppose MyAssembly.exe and YourAssembly.exe are both installed in the native image cache, and both have references to OurDependency.dll. Si se desinstala MyAssembly.exe, no se desinstala OurDependency.dll.If MyAssembly.exe is uninstalled, OurDependency.dll is not uninstalled. Solo se quita cuando también se desinstala YourAssembly.exe.It is only removed when YourAssembly.exe is also uninstalled.

Si va a generar una imagen nativa para un ensamblado en la caché global de ensamblados, especifique su nombre para mostrar.If you are generating a native image for an assembly in the global assembly cache, specify its display name. Vea Assembly.FullName.See Assembly.FullName.

Las imágenes nativas generadas por Ngen.exe se pueden compartir en los dominios de aplicación.The native images that Ngen.exe generates can be shared across application domains. Esto significa que Ngen.exe puede usarse en escenarios de aplicación que requieren el uso compartido de los ensamblados entre los dominios de aplicación.This means you can use Ngen.exe in application scenarios that require assemblies to be shared across application domains. Para especificar una neutralidad de dominios:To specify domain neutrality:

Use siempre código con dominio neutro al cargar el mismo ensamblado en varios dominios de aplicación.Always use domain-neutral code when loading the same assembly into multiple application domains. Si una imagen nativa se carga en un dominio de aplicación no compartido después de haberse cargado en un dominio compartido, no se podrá usar.If a native image is loaded into a nonshared application domain after having been loaded into a shared domain, it cannot be used.

Nota

No se puede descargar código con dominio neutro y el rendimiento puede resultar algo más lento, especialmente al obtener acceso a miembros estáticos.Domain-neutral code cannot be unloaded, and performance may be slightly slower, particularly when accessing static members.

En esta sección Comentarios:In this Remarks section:

Generación de imágenes para distintos escenariosGenerating images for different scenarios

Una vez generada la imagen nativa de un ensamblado, el runtime intenta localizar y usar automáticamente la imagen nativa cada vez que se ejecuta el ensamblado.After you have generated a native image for an assembly, the runtime automatically attempts to locate and use this native image each time it runs the assembly. Se pueden generar varias imágenes, en función de los escenarios de uso.Multiple images can be generated, depending on usage scenarios.

Por ejemplo, si ejecuta un ensamblado en un escenario de depuración o de generación de perfiles, el runtime buscará una imagen nativa generada con las opciones /Debug o /Profile.For example, if you run an assembly in a debugging or profiling scenario, the runtime looks for a native image that was generated with the /Debug or /Profile options. Si no encuentra una imagen nativa coincidente, el runtime usa la compilación JIT estándar.If it is unable to find a matching native image, the runtime reverts to standard JIT compilation. La única forma de depurar imágenes nativas es mediante la creación de una imagen nativa con la opción /Debug.The only way to debug native images is to create a native image with the /Debug option.

La acción uninstall también reconoce los escenarios, por lo que se pueden desinstalar todos los escenarios o solo los escenarios seleccionados.The uninstall action also recognize scenarios, so you can uninstall all scenarios or only selected scenarios.

Determinación de cuándo se deben usar imágenes nativasDetermining when to Use native images

Las imágenes nativas pueden ofrecer mejoras de rendimiento en dos áreas: uso de memoria mejorado y tiempo de inicio reducido.Native images can provide performance improvements in two areas: improved memory use and reduced startup time.

Nota

El rendimiento de las imágenes nativas depende de una serie de factores que dificultan el análisis, como los patrones de acceso a código y a datos, el número de llamadas realizadas a través de los límites de los módulos y el número de dependencias que ya se han cargado en otras aplicaciones.Performance of native images depends on a number of factors that make analysis difficult, such as code and data access patterns, how many calls are made across module boundaries, and how many dependencies have already been loaded by other applications. La única forma de determinar si las imágenes nativas benefician a la aplicación es mediante la realización de mediciones del rendimiento meticulosas en los escenarios de implementación clave.The only way to determine whether native images benefit your application is by careful performance measurements in your key deployment scenarios.

Uso de memoria mejoradoImproved memory use

Las imágenes nativas pueden mejorar significativamente el uso de memoria cuando el código se comparte entre los procesos.Native images can significantly improve memory use when code is shared between processes. Las imágenes nativas son archivos PE de Windows, de modo que una única copia de un archivo .dll pueden compartirla varios procesos; en cambio, el código nativo generado por el compilador JIT se almacena en la memoria privada y no se puede compartir.Native images are Windows PE files, so a single copy of a .dll file can be shared by multiple processes; by contrast, native code produced by the JIT compiler is stored in private memory and cannot be shared.

Las aplicaciones que se ejecutan en Terminal Services también pueden beneficiarse de las páginas de código compartido.Applications that are run under terminal services can also benefit from shared code pages.

Además, al no cargar el compilador JIT, se reserva una cantidad de memoria fija para cada instancia de la aplicación.In addition, not loading the JIT compiler saves a fixed amount of memory for each application instance.

Inicio de aplicación más rápidoFaster application startup

Precompilar los ensamblados con Ngen.exe puede reducir el tiempo de inicio de algunas aplicaciones.Precompiling assemblies with Ngen.exe can improve the startup time for some applications. En general, pueden obtenerse mejoras cuando las aplicaciones comparten ensamblados de componentes porque, una vez iniciada la primera aplicación, los componentes compartidos ya estarán cargados para las siguientes aplicaciones.In general, gains can be made when applications share component assemblies because after the first application has been started the shared components are already loaded for subsequent applications. Un inicio en frío, en el que todos los ensamblados de una aplicación deben cargarse desde el disco duro, no se beneficia tanto de las imágenes nativas porque predomina el tiempo de acceso al disco duro.Cold startup, in which all the assemblies in an application must be loaded from the hard disk, does not benefit as much from native images because the hard disk access time predominates.

El enlace fuerte puede afectar al tiempo de inicio, ya que todas las imágenes con enlaces fuertes al ensamblado de aplicación principal deben cargarse al mismo tiempo.Hard binding can affect startup time, because all images that are hard bound to the main application assembly must be loaded at the same time.

Nota

Antes de .NET Framework 3.5 Service Pack 1.NET Framework 3.5 Service Pack 1, debía poner componentes con nombre seguro en la caché global de ensamblados porque el cargador efectúa una validación adicional de los ensamblados con nombre seguro que no se encuentran en la caché global de ensamblados, lo que anula cualquier mejora del tiempo de inicio obtenida gracias al uso de imágenes nativas.Before the .NET Framework 3.5 Service Pack 1.NET Framework 3.5 Service Pack 1, you should put shared, strong-named components in the global assembly cache, because the loader performs extra validation on strong-named assemblies that are not in the global assembly cache, effectively eliminating any improvement in startup time gained by using native images. Las optimizaciones introducidas en .NET Framework 3.5 SP1.NET Framework 3.5 SP1 quitaron la validación adicional.Optimizations that were introduced in the .NET Framework 3.5 SP1.NET Framework 3.5 SP1 removed the extra validation.

Resumen de las consideraciones de usoSummary of usage considerations

Las siguientes consideraciones generales y consideraciones sobre la aplicación pueden ayudarle a decidir si merece la pena asumir el esfuerzo de evaluar las imágenes nativas de la aplicación:The following general considerations and application considerations may assist you in deciding whether to undertake the effort of evaluating native images for your application:

  • Las imágenes nativas se cargan más rápido que MSIL, ya que eliminan la necesidad de ejecutar muchas actividades en el inicio, como la compilación JIT y la comprobación de la seguridad de tipos.Native images load faster than MSIL because they eliminate the need for many startup activities, such as JIT compilation and type-safety verification.

  • Las imágenes nativas requieren un espacio de trabajo inicial más pequeño, ya que el compilador JIT no es necesario.Native images require a smaller initial working set because there is no need for the JIT compiler.

  • Las imágenes nativas permiten un uso compartido del código entre los procesos.Native images enable code sharing between processes.

  • Las imágenes nativas requieren más espacio en el disco duro que los ensamblados MSIL y pueden tardar bastante tiempo en generarse.Native images require more hard disk space than MSIL assemblies and may require considerable time to generate.

  • Las imágenes nativas necesitan mantenimiento.Native images must be maintained.

    • Cuando se realiza el mantenimiento del ensamblado original o de una de sus dependencias, es necesario volver a generar las imágenes.Images need to be regenerated when the original assembly or one of its dependencies is serviced.

    • Un solo ensamblado puede necesitar varias imágenes nativas para su uso en aplicaciones o escenarios diferentes.A single assembly may need multiple native images for use in different applications or different scenarios. Por ejemplo, la información de configuración de dos aplicaciones podría producir distintas decisiones de enlace para el mismo ensamblado dependiente.For example, the configuration information in two applications might result in different binding decisions for the same dependent assembly.

    • La generación de imágenes nativas solo la puede llevar a cabo un administrador; es decir, deberá realizarse desde una cuenta de Windows del grupo de administradores.Native images must be generated by an administrator; that is, from a Windows account in the Administrators group.

Además de estas consideraciones generales, hay que tener en cuenta la naturaleza de la aplicación a la hora de determinar si las imágenes nativas pueden suponer una mejora en el rendimiento:In addition to these general considerations, the nature of your application must be considered when determining whether native images might provide a performance benefit:

  • Si la aplicación se ejecuta en un entorno que usa muchos componentes compartidos, las imágenes nativas permiten un uso compartido de los componentes por parte de varios procesos.If your application runs in an environment that uses many shared components, native images allow the components to be shared by multiple processes.

  • Si la aplicación usa varios dominios de aplicación, las imágenes nativas permiten un uso compartido de las páginas de códigos entre los distintos dominios.If your application uses multiple application domains, native images allow code pages to be shared across domains.

    Nota

    En las versiones 1.0 y 1.1 de .NET Framework, los dominios de aplicación no pueden compartir las imágenes nativas.In the .NET Framework versions 1.0 and 1.1, native images cannot be shared across application domains. Este no es el caso en la versión 2.0 o posterior.This is not the case in version 2.0 or later.

  • Si la aplicación va a ejecutarse en Terminal Server, las imágenes nativas permiten un uso compartido de las páginas de código.If your application will be run under Terminal Server, native images allow sharing of code pages.

  • En general, las aplicaciones de gran tamaño se benefician de la compilación de imágenes nativas.Large applications generally benefit from compilation to native images. En cambio, las aplicaciones pequeñas no suelen beneficiarse.Small applications generally do not benefit.

  • En las aplicaciones de ejecución prolongada, la compilación JIT en tiempo de ejecución ofrece un rendimiento ligeramente superior al de las imágenes nativas.For long-running applications, run-time JIT compilation performs slightly better than native images. (El enlace fuerte puede mitigar hasta cierto punto esta diferencia de rendimiento).(Hard binding can mitigate this performance difference to some degree.)

Importancia de las direcciones base de los ensambladosImportance of assembly base addresses

Dado que las imágenes nativas son archivos PE de Windows, están sujetas a las mismas cuestiones de cambio de ubicación que otros archivos ejecutables.Because native images are Windows PE files, they are subject to the same rebasing issues as other executable files. La repercusión que las reubicaciones tienen en el rendimiento es aún mayor si se usan enlaces fuertes.The performance cost of relocation is even more pronounced if hard binding is employed.

Para establecer la dirección base de una imagen nativa, use la opción adecuada del compilador para establecer la dirección base del ensamblado.To set the base address for a native image, use the appropriate option of your compiler to set the base address for the assembly. Ngen.exe usa esta dirección base para la imagen nativa.Ngen.exe uses this base address for the native image.

Nota

Las imágenes nativas son de mayor tamaño que los ensamblados administrados a partir de los que se crean.Native images are larger than the managed assemblies from which they were created. Las direcciones base deben calcularse para permitir estos tamaños mayores.Base addresses must be calculated to allow for these larger sizes.

Para ver la dirección base preferida de una imagen nativa, puede usar una herramienta como dumpbin.exe.You can use a tool such as dumpbin.exe to view the preferred base address of a native image.

Enlace fuerteHard binding

El enlace fuerte aumenta el rendimiento y reduce el tamaño del espacio de trabajo de las imágenes nativas.Hard binding increases throughput and reduces working set size for native images. El inconveniente del enlace fuerte es que todas las imágenes con enlaces fuertes a un ensamblado deben cargarse al cargar el ensamblado.The disadvantage of hard binding is that all the images that are hard bound to an assembly must be loaded when the assembly is loaded. Esto puede aumentar significativamente el tiempo de inicio de una aplicación de gran tamaño.This can significantly increase startup time for a large application.

El enlace fuerte es adecuado para las dependencias que se cargan en todos los escenarios de la aplicación en los que el rendimiento es un factor crítico.Hard binding is appropriate for dependencies that are loaded in all your application's performance-critical scenarios. Al igual que con cualquier otro aspecto del uso de imágenes nativas, la realización de mediciones del rendimiento meticulosas constituye la única forma de determinar si el enlace fuerte mejora el rendimiento de la aplicación.As with any aspect of native image use, careful performance measurements are the only way to determine whether hard binding improves your application's performance.

Los atributos DependencyAttribute y DefaultDependencyAttribute permiten suministrar sugerencias de enlace fuerte a Ngen.exe.The DependencyAttribute and DefaultDependencyAttribute attributes allow you to provide hard binding hints to Ngen.exe.

Nota

Estos atributos son sugerencias para Ngen.exe, no comandos.These attributes are hints to Ngen.exe, not commands. El uso de estos atributos no garantiza el enlace fuerte.Using them does not guarantee hard binding. El significado de estos atributos puede cambiar en futuras versiones.The meaning of these attributes may change in future releases.

Especificación de una sugerencia de enlace para una dependenciaSpecifying a binding hint for a dependency

Aplique DependencyAttribute a un ensamblado para indicar la probabilidad de que se cargue una dependencia especificada.Apply the DependencyAttribute to an assembly to indicate the likelihood that a specified dependency will be loaded. LoadHint.Always indica que el enlace fuerte es adecuado, Default indica que debe usarse el valor predeterminado de la dependencia y Sometimes indica que el enlace fuerte no es adecuado.LoadHint.Always indicates that hard binding is appropriate, Default indicates that the default for the dependency should be used, and Sometimes indicates that hard binding is not appropriate.

En el siguiente código se muestran los atributos de un ensamblado que tiene dos dependencias.The following code shows the attributes for an assembly that has two dependencies. La primera dependencia (Assembly1) es una candidata adecuada para el enlace fuerte, pero la segunda (Assembly2) no lo es.The first dependency (Assembly1) is an appropriate candidate for hard binding, and the second (Assembly2) is not.

Imports System.Runtime.CompilerServices  
<Assembly:DependencyAttribute("Assembly1", LoadHint.Always)>  
<Assembly:DependencyAttribute("Assembly2", LoadHint.Sometimes)>  
using System.Runtime.CompilerServices;  
[assembly:DependencyAttribute("Assembly1", LoadHint.Always)]  
[assembly:DependencyAttribute("Assembly2", LoadHint.Sometimes)]  
using namespace System::Runtime::CompilerServices;  
[assembly:DependencyAttribute("Assembly1", LoadHint.Always)];  
[assembly:DependencyAttribute("Assembly2", LoadHint.Sometimes)];  

El nombre de ensamblado no incluye la extensión de nombre de archivo.The assembly name does not include the file name extension. Pueden usarse nombres para mostrar.Display names can be used.

Especificación de una sugerencia de enlace predeterminado para un ensambladoSpecifying a default binding hint for an assembly

Las sugerencias de enlace predeterminado solo son necesarias para los ensamblados que cualquier aplicación con una dependencia sobre los mismos vaya a usar inmediatamente y con frecuencia.Default binding hints are only needed for assemblies that will be used immediately and frequently by any application that has a dependency on them. Aplique el atributo DefaultDependencyAttribute con LoadHint.Always a dichos ensamblados para especificar que debe usarse un enlace fuerte.Apply the DefaultDependencyAttribute with LoadHint.Always to such assemblies to specify that hard binding should be used.

Nota

No hay ningún motivo para aplicar el atributo DefaultDependencyAttribute a los ensamblados .dll que no pertenezcan a esta categoría, porque el hecho de aplicar el atributo con cualquier valor distinto de LoadHint.Always produce el mismo efecto que no aplicar el atributo.There is no reason to apply DefaultDependencyAttribute to .dll assemblies that do not fall into this category, because applying the attribute with any value other than LoadHint.Always has the same effect as not applying the attribute at all.

Microsoft usa el atributo DefaultDependencyAttribute para especificar que el enlace fuerte es el valor predeterminado para un pequeño número de ensamblados de .NET Framework, como mscorlib.dll.Microsoft uses the DefaultDependencyAttribute to specify that hard binding is the default for a very small number of assemblies in the .NET Framework, such as mscorlib.dll.

Procesamiento diferidoDeferred processing

La generación de imágenes nativas para una aplicación de gran tamaño puede llevar bastante tiempo.Generation of native images for a very large application can take considerable time. Del mismo modo, los cambios realizados en un componente compartido o en la configuración del equipo pueden requerir la actualización de muchas imágenes nativas.Similarly, changes to a shared component or changes to computer settings might require many native images to be updated. Las acciones install y update disponen de una opción /queue que pone en cola la operación para su ejecución diferida por parte del servicio de imágenes nativas.The install and update actions have a /queue option that queues the operation for deferred execution by the native image service. Además, Ngen.exe dispone de las acciones queue y executeQueuedItems, que proporcionan algo de control sobre el servicio.In addition, Ngen.exe has queue and executeQueuedItems actions that provide some control over the service. Para más información, vea Servicio de imágenes nativas.For more information, see Native Image Service.

Imágenes nativas y compilación JITNative images and JIT compilation

Si Ngen.exe encuentra en un ensamblado métodos que no puede generar, los excluye de la imagen nativa.If Ngen.exe encounters any methods in an assembly that it cannot generate, it excludes them from the native image. Cuando el runtime ejecuta el ensamblado, usa la compilación JIT para los métodos que no se han incluido en la imagen nativa.When the runtime executes this assembly, it reverts to JIT compilation for the methods that were not included in the native image.

Además, si se ha actualizado el ensamblado o la imagen se ha invalidado por cualquier motivo, no se usan imágenes nativas.In addition, native images are not used if the assembly has been upgraded, or if the image has been invalidated for any reason.

Imágenes no válidasInvalid images

Cuando se usa Ngen.exe para crear una imagen nativa de un ensamblado, el resultado depende de las opciones especificadas en la línea de comandos y de determinadas opciones de configuración del equipo.When you use Ngen.exe to create a native image of an assembly, the output depends upon the command-line options that you specify and certain settings on your computer. Entre estas opciones de configuración, se incluyen las siguientes:These settings include the following:

  • La versión de .NET Framework.The version of the .NET Framework.

  • La versión del sistema operativo, si se cambia de la familia Windows 9x a la familia Windows NT.The version of the operating system, if the change is from the Windows 9x family to the Windows NT family.

  • La identidad exacta del ensamblado (la recompilación cambia la identidad).The exact identity of the assembly (recompilation changes identity).

  • La identidad exacta de todos los ensamblados a los que hace referencia el ensamblado (la recompilación cambia la identidad).The exact identity of all assemblies that the assembly references (recompilation changes identity).

  • Factores de seguridad.Security factors.

Ngen.exe registra esta información cuando genera una imagen nativa.Ngen.exe records this information when it generates a native image. Al ejecutar un ensamblado, el runtime busca la imagen nativa generada con las opciones y los valores de configuración que coinciden con el entorno actual del equipo.When you execute an assembly, the runtime looks for the native image generated with options and settings that match the computer's current environment. El runtime usa la compilación JIT del ensamblado si no encuentra una imagen nativa coincidente.The runtime reverts to JIT compilation of an assembly if it cannot find a matching native image. Si se realizan los siguientes cambios en la configuración y el entorno de un equipo, las imágenes nativas dejarán de ser válidas:The following changes to a computer's settings and environment cause native images to become invalid:

  • La versión de .NET Framework.The version of the .NET Framework.

    Si se aplica una actualización a .NET Framework, todas las imágenes nativas que se hayan creado mediante Ngen.exe dejarán de ser válidas.If you apply an update to the .NET Framework, all native images that you have created using Ngen.exe become invalid. Por esta razón, todas las actualizaciones de .NET Framework ejecutan el comando Ngen Update, para garantizar que se vuelven a generar todas las imágenes nativas.For this reason, all updates of the .NET Framework execute the Ngen Update command, to ensure that all native images are regenerated. .NET Framework crea nuevas imágenes nativas de forma automática para las bibliotecas de .NET Framework que instala.The .NET Framework automatically creates new native images for the .NET Framework libraries that it installs.

  • La versión del sistema operativo, si se cambia de la familia Windows 9x a la familia Windows NT.The version of the operating system, if the change is from the Windows 9x family to the Windows NT family.

    Por ejemplo, si la versión del sistema operativo que se ejecuta en un equipo cambia de Windows 98 a Windows XP, todas las imágenes nativas almacenadas en la memoria caché de imágenes nativas dejan de ser válidas.For example, if the version of the operating system running on a computer changes from Windows 98 to Windows XP, all native images stored in the native image cache become invalid. Sin embargo, si el sistema operativo cambia de Windows 2000 a Windows XP, las imágenes siguen siendo válidas.However, if the operating system changes from Windows 2000 to Windows XP, the images are not invalidated.

  • La identidad exacta del ensamblado.The exact identity of the assembly.

    Si vuelve a compilar un ensamblado, su imagen nativa correspondiente deja de ser válida.If you recompile an assembly, the assembly's corresponding native image becomes invalid.

  • La identidad exacta de todos los ensamblados a los que hace referencia el ensamblado.The exact identity of any assemblies the assembly references.

    Si actualiza un ensamblado administrado, todas las imágenes nativas que, directa o indirectamente, dependen de ese ensamblado dejan de ser válidas y deben volver a generarse.If you update a managed assembly, all native images that directly or indirectly depend on that assembly become invalid and need to be regenerated. Esto se aplica tanto a las referencias ordinarias como a las dependencias con enlaces fuertes.This includes both ordinary references and hard-bound dependencies. Cuando se aplica una actualización de software, el programa de instalación debe ejecutar un comando Ngen Update para garantizar que se vuelven a generar todas las imágenes nativas dependientes.Whenever a software update is applied, the installation program should execute an Ngen Update command to ensure that all dependent native images are regenerated.

  • Factores de seguridad.Security factors.

    Si se modifica la directiva de seguridad del equipo para restringir los permisos previamente concedidos a un ensamblado, la imagen nativa compilada con anterioridad para dicho ensamblado puede dejar de ser válida.Changing machine security policy to restrict permissions previously granted to an assembly can cause a previously compiled native image for that assembly to become invalid.

    Para información detallada sobre cómo Common Language Runtime administra la seguridad de acceso del código y sobre cómo usar los permisos, consulte Seguridad de acceso del código.For detailed information about how the common language runtime administers code access security and how to use permissions, see Code Access Security.

Solución de problemasTroubleshooting

Los temas de solución de problemas siguientes permiten ver cuáles son las imágenes nativas que la aplicación usa y cuáles no puede usar, determinar cuándo el compilador JIT comienza a compilar un método y muestra cómo excluir la compilación de imágenes nativas de métodos específicos.The following troubleshooting topics allow you to see which native images are being used and which cannot be used by your application, to determine when the JIT compiler starts to compile a method, and shows how to opt out of native image compilation of specified methods.

Visor de registro de enlaces de ensambladosAssembly Binding Log Viewer

Para confirmar que la aplicación está usando imágenes nativas, puede usar Fuslogvw.exe (Visor de registro de enlaces de ensamblados).To confirm that native images are being used by your application, you can use the Fuslogvw.exe (Assembly Binding Log Viewer). Seleccione Imágenes nativas en el cuadro Categorías de registro de la ventana del visor de registro de enlaces.Select Native Images in the Log Categories box on the binding log viewer window. Fuslogvw.exe proporciona información sobre el motivo por el que se ha rechazado una imagen nativa.Fuslogvw.exe provides information about why a native image was rejected.

Asistente para la depuración administrada JITCompilationStartThe JITCompilationStart managed debugging assistant

Puede usar el Asistente para la depuración administrada (MDA) jitCompilationStart para determinar el momento en el que el compilador JIT empieza a compilar una función.You can use the jitCompilationStart managed debugging assistant (MDA) to determine when the JIT compiler starts to compile a function.

Exclusión de la generación de imágenes nativasOpting out of native image generation

En algunos casos, NGen.exe puede tener problemas para generar una imagen nativa para un método específico, o bien es posible que prefiera que el método se compile en JIT en lugar de compilarlo en una imagen nativa.In some cases, NGen.exe may have difficulty generating a native image for a specific method, or you may prefer that the method be JIT compiled rather then compiled to a native image. En este caso, puede usar el atributo System.Runtime.BypassNGenAttribute para evitar que NGen.exe genere una imagen nativa para un método concreto.In this case, you can use the System.Runtime.BypassNGenAttribute attribute to prevent NGen.exe from generating a native image for a particular method. El atributo se debe aplicar individualmente a cada método cuyo código no desea que se incluya en la imagen nativa.The attribute must be applied individually to each method whose code you do not want to include in the native image. NGen.exe reconoce el atributo y no genera código en la imagen nativa para el método correspondiente.NGen.exe recognizes the attribute and does not generate code in the native image for the corresponding method.

Pero tenga en cuenta que BypassNGenAttribute no está definido como tipo en la biblioteca de clases .NET Framework.Note, however, that BypassNGenAttribute is not defined as a type in the .NET Framework Class Library. Para usar el atributo en el código, primero debe definirlo de la manera siguiente:In order to consume the attribute in your code, you must first define it as follows:

namespace System.Runtime
{
   public class BypassNGenAttribute : Attribute 
   {
   }   
}
Namespace System.Runtime
   Public Class BypassNGenAttribute : Inherits Attribute 
   End Class   
End Namespace

Luego puede aplicar el atributo a cada método.You can then apply the attribute on a per-method basis. En el ejemplo siguiente se indica al Generador de imágenes nativas que no debe generar una imagen nativa para el método ExampleClass.ToJITCompile.The following example instructs the Native Image Generator that it should not generate a native image for the ExampleClass.ToJITCompile method.

using System;
using System.Runtime;

public class ExampleClass
{
   [BypassNGen]
   public void ToJITCompile()
   {
   }
}
Imports System.Runtime

Public Class ExampleClass
   <BypassNGen>
   Public Sub ToJITCompile()
   End Sub
End Class

EjemplosExamples

El siguiente comando genera una imagen nativa para ClientApp.exe, que se encuentra en el directorio actual, e instala la imagen en la memoria caché de imágenes nativas.The following command generates a native image for ClientApp.exe, located in the current directory, and installs the image in the native image cache. Si existe un archivo de configuración para el ensamblado, Ngen.exe usará dicho archivo.If a configuration file exists for the assembly, Ngen.exe uses it. Además, se generarán imágenes nativas para cualquier archivo .dll al que haga referencia ClientApp.exe.In addition, native images are generated for any .dll files that ClientApp.exe references.

ngen install ClientApp.exe  

Una imagen instalada con Ngen.exe también recibe el nombre de raíz.An image installed with Ngen.exe is also called a root. Una raíz puede ser una aplicación o un componente compartido.A root can be an application or a shared component.

El siguiente comando genera una imagen nativa para MyAssembly.exe con la ruta de acceso especificada.The following command generates a native image for MyAssembly.exe with the specified path.

ngen install c:\myfiles\MyAssembly.exe  

A la hora de buscar los ensamblados y sus dependencias, Ngen.exe usa la misma lógica de búsqueda que Common Language Runtime.When locating assemblies and their dependencies, Ngen.exe uses the same probing logic used by the common language runtime. De forma predeterminada, el directorio que contiene ClientApp.exe se usa como directorio base de la aplicación y todas las búsquedas de ensamblados comienzan en este directorio.By default, the directory that contains ClientApp.exe is used as the application base directory, and all assembly probing begins in this directory. Se puede reemplazar este comportamiento mediante la opción /AppBase.You can override this behavior by using the /AppBase option.

Nota

Se trata de un cambio de comportamiento de Ngen.exe en las versiones 1.0 y 1.1 de .NET Framework, donde la base de la aplicación está establecida en el directorio actual.This is a change from Ngen.exe behavior in the .NET Framework versions 1.0 and 1.1, where the application base is set to the current directory.

Un ensamblado puede disponer de una dependencia sin referencia alguna; por ejemplo, si carga un archivo .dll mediante el método Assembly.Load.An assembly can have a dependency without a reference, for example if it loads a .dll file by using the Assembly.Load method. Se puede crear una imagen nativa de este archivo .dll usando la información de configuración del ensamblado de aplicación, con la opción /ExeConfig.You can create a native image for such a .dll file by using configuration information for the application assembly, with the /ExeConfig option. El siguiente comando genera una imagen nativa de MyLib.dll, usando la información de configuración de MyApp.exe.The following command generates a native image for MyLib.dll, using the configuration information from MyApp.exe.

ngen install c:\myfiles\MyLib.dll /ExeConfig:c:\myapps\MyApp.exe  

Los ensamblados instalados de esta manera no se quitan cuando se quita la aplicación.Assemblies installed in this way are not removed when the application is removed.

Para desinstalar una dependencia, use las mismas opciones de línea de comandos que se usaron para su instalación.To uninstall a dependency, use the same command-line options that were used to install it. El siguiente comando desinstala el archivo MyLib.dll del ejemplo anterior.The following command uninstalls the MyLib.dll from the previous example.

ngen uninstall c:\myfiles\MyLib.dll /ExeConfig:c:\myapps\MyApp.exe  

Para crear una imagen nativa de un ensamblado en la caché global de ensamblados, use el nombre para mostrar del ensamblado.To create a native image for an assembly in the global assembly cache, use the display name of the assembly. Por ejemplo:For example:

ngen install "ClientApp, Version=1.0.0.0, Culture=neutral,   
  PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL"  

NGen.exe generará un conjunto independiente de imágenes para cada escenario que se instale.NGen.exe generates a separate set of images for each scenario you install. Por ejemplo, el siguiente comando instala un conjunto completo de imágenes nativas para el funcionamiento normal, otro conjunto completo para la depuración, y un tercer conjunto para la creación de perfiles:For example, the following commands install a complete set of native images for normal operation, another complete set for debugging, and a third for profiling:

ngen install MyApp.exe  
ngen install MyApp.exe /debug  
ngen install MyApp.exe /profile  

Mostrar la memoria caché de imágenes nativasDisplaying the Native Image Cache

Una vez instaladas en la memoria caché las imágenes nativas, se pueden mostrar mediante Ngen.exe.Once native images are installed in the cache, they can be displayed using Ngen.exe. El siguiente comando muestra todas las imágenes nativas que contiene la memoria caché de imágenes nativas.The following command displays all native images in the native image cache.

ngen display  

La acción display muestra primero todos los ensamblados raíz, seguidos de una lista de todas las imágenes nativas del equipo.The display action lists all the root assemblies first, followed by a list of all the native images on the computer.

Use el nombre simple de un ensamblado para mostrar únicamente información de dicho ensamblado.Use the simple name of an assembly to display information only for that assembly. El siguiente comando muestra todas las imágenes nativas de la memoria caché de imágenes nativas que coinciden con el nombre parcial MyAssembly, sus dependencias y todas las raíces que tienen una dependencia en MyAssembly:The following command displays all native images in the native image cache that match the partial name MyAssembly, their dependencies, and all roots that have a dependency on MyAssembly:

ngen display MyAssembly  

Conocer las raíces que dependen de un ensamblado de componente compartido resulta de gran utilidad para valorar el impacto de una acción update una vez actualizado el componente compartido.Knowing what roots depend on a shared component assembly is useful in gauging the impact of an update action after the shared component is upgraded.

Si especifica la extensión de archivo de un ensamblado, deberá especificar la ruta de acceso o ejecutar Ngen.exe desde el directorio que contiene el ensamblado:If you specify an assembly's file extension, you must either specify the path or execute Ngen.exe from the directory containing the assembly:

ngen display c:\myApps\MyAssembly.exe  

El siguiente comando muestra todas las imágenes nativas de la memoria caché de imágenes nativas con el nombre MyAssembly y la versión 1.0.0.0.The following command displays all native images in the native image cache with the name MyAssembly and the version 1.0.0.0.

ngen display "myAssembly, version=1.0.0.0"  

Actualizar imágenesUpdating Images

Normalmente, las imágenes se actualizan tras la actualización de un componente compartido.Images are typically updated after a shared component has been upgraded. Para actualizar todas las imágenes nativas que hayan cambiado o cuyas dependencias hayan cambiado, use la acción update sin ningún argumento.To update all native images that have changed, or whose dependencies have changed, use the update action with no arguments.

ngen update  

Actualizar todas las imágenes puede ser un proceso largo.Updating all images can be a lengthy process. La opción /queue pone en cola las actualizaciones para que las ejecute el servicio de imágenes nativas.You can queue the updates for execution by the native image service by using the /queue option. Para más información sobre la opción /queue y las prioridades de instalación, vea Servicio de imágenes nativas.For more information on the /queue option and installation priorities, see Native Image Service.

ngen update /queue  

Desinstalar imágenesUninstalling Images

Ngen.exe mantiene una lista de dependencias; de este modo, los componentes compartidos se quitan únicamente cuando se han quitado todos los ensamblados que dependen de ellos.Ngen.exe maintains a list of dependencies, so that shared components are removed only when all assemblies that depend on them have been removed. Además, si un componente compartido se ha instalado como raíz, no se quita.In addition, a shared component is not removed if it has been installed as a root.

El siguiente comando desinstala todos los escenarios de la raíz ClientApp.exe:The following command uninstalls all scenarios for the root ClientApp.exe:

ngen uninstall ClientApp  

Se puede usar la acción uninstall para quitar escenarios concretos.The uninstall action can be used to remove specific scenarios. El siguiente comando desinstala todos los escenarios de depuración de ClientApp.exe:The following command uninstalls all debug scenarios for ClientApp.exe:

ngen uninstall ClientApp /debug  

Nota

Cuando se desinstalan escenarios /debug no se desinstalan los escenarios que incluyen tanto /profile como /debug.Uninstalling /debug scenarios does not uninstall a scenario that includes both /profile and /debug.

El siguiente comando desinstala todos los escenarios de una versión concreta de ClientApp.exe:The following command uninstalls all scenarios for a specific version of ClientApp.exe:

ngen uninstall "ClientApp, Version=1.0.0.0"  

Los siguientes comandos desinstalan todos los escenarios de "ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL", o simplemente el escenario de depuración de dicho ensamblado:The following commands uninstall all scenarios for "ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL", or just the debug scenario for that assembly:

ngen uninstall "ClientApp, Version=1.0.0.0, Culture=neutral,   
  PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL"  
ngen uninstall "ClientApp, Version=1.0.0.0, Culture=neutral,   
  PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL" /debug  

Al igual que ocurre con la acción install, cuando se suministra una extensión, es necesario ejecutar Ngen.exe desde el directorio que contiene el ensamblado o especificar una ruta de acceso completa.As with the install action, supplying an extension requires either executing Ngen.exe from the directory containing the assembly or specifying a full path.

Para obtener ejemplos relacionados con el servicio de imágenes nativas, vea Servicio de imágenes nativas.For examples relating to the native image service, see Native Image Service.

Tarea de imagen nativaNative Image Task

La tarea de imagen nativa es una tarea de Windows que genera y mantiene imágenes nativas.The native image task is a Windows task that generates and maintains native images. La tarea de imagen nativa genera y recupera automáticamente imágenes nativas para los escenarios admitidos.The native image task generates and reclaims native images automatically for supported scenarios. (Consulte Crear imágenes nativas). También permite que los instaladores usen Ngen.exe (Generador de imágenes nativas) para aplazar la creación y la actualización de las imágenes nativas.(See Creating Native Images.) It also enables installers to use Ngen.exe (Native Image Generator) to create and update native images at a deferred time.

La tarea de imagen nativa se registra una vez por cada arquitectura de CPU admitida en un equipo, para permitir la compilación de las aplicaciones que tienen como destino cada arquitectura:The native image task is registered once for each CPU architecture supported on a computer, to allow compilation for applications that target each architecture:

Nombre de la tareaTask name Equipo de 32 bits32-bit computer Equipo de 64 bits64-bit computer
NET Framework NGEN v4.0.30319NET Framework NGEN v4.0.30319 Yes Yes
NET Framework NGEN v4.0.30319 64NET Framework NGEN v4.0.30319 64 NoNo Yes

La tarea de imagen nativa está disponible en .NET Framework 4.5 y las versiones posteriores, con Windows 8 o posterior.The native image task is is available in the .NET Framework 4.5 and later versions, when running on Windows 8 or later. En las versiones anteriores de Windows, .NET Framework usa el Servicio de imágenes nativas.On earlier versions of Windows, the .NET Framework uses the Native Image Service.

Duración de la tareaTask Lifetime

En general, el Programador de tareas de Windows inicia la tarea de imagen nativa cada noche, cuando el equipo está inactivo.In general, the Windows Task Scheduler starts the native image task every night when the computer is idle. La tarea busca los trabajos aplazados puestos en cola por los instaladores de aplicaciones, las solicitudes aplazadas de actualización de imágenes nativas y las creaciones automáticas de imágenes.The task checks for any deferred work that is queued by application installers, any deferred native image update requests, and any automatic image creation. La tarea completa los elementos de trabajo pendientes y, después, se apaga.The task completes outstanding work items and then shuts down. Si el equipo deja de estar inactivo mientras se ejecuta la tarea, esta se detendrá.If the computer stops being idle while the task is running, the task stops.

También puede iniciar la tarea de imagen nativa manualmente con la interfaz de usuario del Programador de tareas o con llamadas manuales a NGen.exe.You can also start the native image task manually through the Task Scheduler UI or through manual calls to NGen.exe. Si la tarea se inicia con alguno de estos métodos, seguirá ejecutándose cuando el equipo ya no esté inactivo.If the task is started through either of these methods, it will continue running when the computer is no longer idle. Las imágenes creadas manualmente con NGen.exe tienen mayor prioridad, para que el comportamiento de los instaladores de aplicaciones sea predecible.Images created manually by using NGen.exe are prioritized to enable predictable behavior for application installers.

Servicio de imágenes nativasNative Image Service

El servicio de imágenes nativas es un servicio de Windows que genera y mantiene imágenes nativas.The native image service is a Windows service that generates and maintains native images. El servicio de imágenes nativas permite al desarrollador aplazar la instalación y la actualización de imágenes nativas hasta los períodos en los que el equipo está inactivo.The native image service allows the developer to defer the installation and update of native images to periods when the computer is idle.

Normalmente, quien inicia el servicio de imágenes nativas es el programa de instalación (el instalador) de una aplicación o una actualización.Normally, the native image service is initiated by the installation program (installer) for an application or update. En el caso de las acciones de prioridad 3, el servicio se ejecuta durante el tiempo de inactividad del equipo.For priority 3 actions, the service executes during idle time on the computer. El servicio guarda su estado y es capaz de continuar a lo largo de varios reinicios si es necesario.The service saves its state and is capable of continuing through multiple reboots if necessary. Se pueden poner en cola varias compilaciones de imágenes.Multiple image compilations can be queued.

El servicio también interactúa con el comando Ngen.exe manual.The service also interacts with the manual Ngen.exe command. Los comandos manuales tienen prioridad sobre la actividad en segundo plano.Manual commands take precedence over background activity.

Nota

En Windows Vista, el nombre del servicio de imágenes nativas que se muestra es "Microsoft.NET Framework NGEN v2.0.50727_X86" o "Microsoft.NET Framework NGEN v2.0.50727_X64".On Windows Vista, the name displayed for the native image service is "Microsoft.NET Framework NGEN v2.0.50727_X86" or "Microsoft.NET Framework NGEN v2.0.50727_X64". En todas las versiones anteriores de Microsoft Windows, el nombre es "Servicio de optimización de tiempo de ejecución de .NET v2.0.50727_X86" o "Servicio de optimización de tiempo de ejecución de .NET v2.0.50727_X64".On all earlier versions of Microsoft Windows, the name is ".NET Runtime Optimization Service v2.0.50727_X86" or ".NET Runtime Optimization Service v2.0.50727_X64".

Iniciar operaciones aplazadasLaunching Deferred Operations

Antes de comenzar una instalación o una actualización, se recomienda pausar el servicio.Before beginning an installation or upgrade, pausing the service is recommended. Así, el servicio no se ejecutará mientras el instalador copia archivos o coloca ensamblados en la caché global de ensamblados.This ensures that the service does not execute while the installer is copying files or putting assemblies in the global assembly cache. La siguiente línea de comandos de Ngen.exe pausa el servicio:The following Ngen.exe command line pauses the service:

ngen queue pause  

Después de poner en cola todas las operaciones aplazadas, el siguiente comando permite reanudar el servicio:When all deferred operations have been queued, the following command allows the service to resume:

ngen queue continue  

Para aplazar la generación de imágenes nativas al instalar una nueva aplicación o al actualizar un componente compartido, utilice la opción /queue con las acciones install o update.To defer native image generation when installing a new application or when updating a shared component, use the /queue option with the install or update actions. Las siguientes líneas de comandos de Ngen.exe instalan una imagen nativa de un componente compartido y realizan una actualización de todas las raíces a las que puede que afectaran:The following Ngen.exe command lines install a native image for a shared component and perform an update of all roots that may have been affected:

ngen install MyComponent /queue  
ngen update /queue  

La acción update vuelve a generar todas las imágenes nativas invalidadas, no solo las que utilizan MyComponent.The update action regenerates all native images that have been invalidated, not just those that use MyComponent.

Si la aplicación está formada por muchas raíces, puede controlar la prioridad de las acciones aplazadas.If your application consists of many roots, you can control the priority of the deferred actions. Los siguientes comandos ponen en cola la instalación de tres raíces.The following commands queue the installation of three roots. Assembly1 se instala en primer lugar, sin esperar al tiempo de inactividad.Assembly1 is installed first, without waiting for idle time. Assembly2 también se instala sin esperar al tiempo de inactividad, pero una vez que finalizan todas las acciones de prioridad 1.Assembly2 is also installed without waiting for idle time, but after all priority 1 actions have completed. Assembly3 se instala cuando el servicio detecta que el equipo se encuentra inactivo.Assembly3 is installed when the service detects that the computer is idle.

ngen install Assembly1 /queue:1  
ngen install Assembly2 /queue:2  
ngen install Assembly3 /queue:3  

Puede forzar la ejecución sincrónica de las acciones en cola con la acción executeQueuedItems.You can force queued actions to occur synchronously by using the executeQueuedItems action. Si especifica la prioridad (opcional), esta acción afecta solo a las acciones en cola que tienen una prioridad igual o menor.If you supply the optional priority, this action affects only the queued actions that have equal or lower priority. La prioridad predeterminada es 3, por lo que el siguiente comando de Ngen.exe procesa todas las acciones en cola inmediatamente y no vuelve hasta que finalizan:The default priority is 3, so the following Ngen.exe command processes all queued actions immediately, and does not return until they are finished:

ngen executeQueuedItems  

Los comandos sincrónicos son ejecutados por Ngen.exe y no utilizan el servicio de imágenes nativas.Synchronous commands are executed by Ngen.exe and do not use the native image service. Puede ejecutar acciones con Ngen.exe mientras se está ejecutando el servicio de imágenes nativas.You can execute actions using Ngen.exe while the native image service is running.

Apagado del servicioService Shutdown

El servicio, después de iniciarse con la ejecución de un comando de Ngen.exe que incluye la opción /queue, se ejecuta en segundo plano hasta que se completan todas las acciones.After being initiated by the execution of an Ngen.exe command that includes the /queue option, the service runs in the background until all actions have been completed. El servicio guarda su estado para poder continuar a lo largo de varios reinicios si es necesario.The service saves its state so that it can continue through multiple reboots if necessary. Cuando el servicio detecta que no hay más acciones en cola, restablece su estado para no reiniciarse la próxima vez que se arranque el equipo y, luego, se apaga.When the service detects that there are no more actions queued, it resets its status so that it will not restart the next time the computer is booted, and then it shuts itself down.

Interacción del servicio con los clientesService Interaction with Clients

En la versión 2.0 de .NET Framework, la única interacción con el servicio de imágenes nativas es a través de la herramienta de línea de comandos Ngen.exe.In the .NET Framework version 2.0, the only interaction with the native image service is through the command-line tool Ngen.exe. Utilice la herramienta de línea de comandos en los scripts de instalación para poner en cola las acciones del servicio de imágenes nativas e interactuar con el servicio.Use the command-line tool in installation scripts to queue actions for the native image service and to interact with the service.

Vea tambiénSee Also

HerramientasTools
Proceso de ejecución administradaManaged Execution Process
Cómo el motor en tiempo de ejecución ubica ensambladosHow the Runtime Locates Assemblies
Símbolos del sistemaCommand Prompts