Ngen.exe (Generator obrazu natywnego)Ngen.exe (Native Image Generator)

Generator obrazów natywnych (Ngen.exe) jest narzędziem, które poprawia wydajność zarządzanych aplikacji.The Native Image Generator (Ngen.exe) is a tool that improves the performance of managed applications. Program Ngen.exe tworzy obrazy natywne, które są plikami zawierającymi skompilowany kod maszynowy specyficzny dla procesora, i instaluje je w pamięci podręcznej obrazów natywnych na komputerze lokalnym.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. Środowisko uruchomieniowe może używać obrazów natywnych z tej pamięci podręcznej, zamiast używać kompilatora JIT (Just-In-Time) w celu skompilowania oryginalnego zestawu.The runtime can use native images from the cache instead of using the just-in-time (JIT) compiler to compile the original assembly.

Uwaga

Ngen. exe kompiluje obrazy natywne dla zestawów, które są przeznaczone tylko dla .NET Framework.Ngen.exe compiles native images for assemblies that target the .NET Framework only. Równoważny Generator obrazu natywnego dla platformy .NET Core to CrossGen.The equivalent native image generator for .NET Core is CrossGen.

Zmiany w programie Ngen. exe w .NET Framework 4:Changes to Ngen.exe in the .NET Framework 4:

  • Program Ngen.exe obecnie kompiluje zestawy w trybie pełnego zaufania, a zasady zabezpieczeń dostępu kodu (CAS) nie są już uwzględniane.Ngen.exe now compiles assemblies with full trust, and code access security (CAS) policy is no longer evaluated.

  • Obrazy natywne generowane przez program Ngen.exe nie mogą już być ładowane do aplikacji, które działają w trybie częściowego zaufania.Native images that are generated with Ngen.exe can no longer be loaded into applications that are running in partial trust.

Zmiany w programie Ngen.exe wprowadzone w programie .NET Framework w wersji 2.0:Changes to Ngen.exe in the .NET Framework version 2.0:

  • Instalacja zestawu powoduje także instalację jego zależności, co upraszcza składnię programu Ngen.exe.Installing an assembly also installs its dependencies, simplifying the syntax of Ngen.exe.

  • Obrazy natywne mogą być współużytkowane w różnych domenach aplikacji.Native images can now be shared across application domains.

  • Nowa akcja updateponownie tworzy obrazy, które zostały unieważnione.A new action, update, re-creates images that have been invalidated.

  • Akcje mogą być odraczane w celu wykonania przez usługę, która korzysta z czasu bezczynności komputera, aby generować i instalować obrazy.Actions can be deferred for execution by a service that uses idle time on the computer to generate and install images.

  • Niektóre przyczyny unieważnienia obrazu zostały wyeliminowane.Some causes of image invalidation have been eliminated.

W systemie Windows 8 zobacz zadania obrazu natywnego.On Windows 8, see Native Image Task.

Aby uzyskać dodatkowe informacje na temat korzystania z programu Ngen. exe i usługi obrazów natywnych, zobacz Native Image Service.For additional information on using Ngen.exe and the native image service, see Native Image Service.

Uwaga

Składnię programu Ngen. exe dla wersji 1,0 i 1,1 .NET Framework można znaleźć w starszej składni generatora obrazów natywnych (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.

To narzędzie jest instalowane automatycznie z programem Visual Studio.This tool is automatically installed with Visual Studio. Aby uruchomić narzędzie, użyj wiersz polecenia dla deweloperów dla programu Visual Studio (lub wiersza polecenia programu Visual Studio w systemie Windows 7).To run the tool, use the Developer Command Prompt for Visual Studio (or the Visual Studio Command Prompt in Windows 7). Aby uzyskać więcej informacji, zobacz wiersza polecenia.For more information, see Command Prompts.

W wierszu polecenia wpisz następujące polecenie:At the command prompt, type the following:

SkładniaSyntax

ngen action [options]
ngen /? | /help

AkcjeActions

W poniższej tabeli przedstawiono składnię poszczególnych action.The following table shows the syntax of each action. Aby uzyskać opisy poszczególnych części action, zobacz argumenty, poziomy priorytetów, scenariuszei tabele konfiguracyjne .For descriptions of the individual parts of an action, see the Arguments, Priority Levels, Scenarios, and Config tables. W tabeli Options opisano options i przełączenia pomocy.The Options table describes the options and the help switches.

AkcjaAction OpisDescription
install [assemblyName | assemblyPath] [scenarios] [config] [/queue[:{1|2|3}]]install [assemblyName | assemblyPath] [scenarios] [config] [/queue[:{1|2|3}]] Generuje obrazy natywne dla zestawu i jego zależności, a także instaluje obrazy w pamięci podręcznej obrazów natywnych.Generate native images for an assembly and its dependencies and install the images in the native image cache.

Jeśli /queue jest określona, akcja zostanie umieszczona w kolejce dla usługi obrazów natywnych.If /queue is specified, the action is queued for the native image service. Domyślnym priorytetem jest 3.The default priority is 3. Zobacz tabelę poziomów priorytetów .See the Priority Levels table.
uninstall [assemblyName | assemblyPath] [scenarios] [config]uninstall [assemblyName | assemblyPath] [scenarios] [config] Usuwa obrazy natywne zestawu i jego zależności z pamięci podręcznej obrazów natywnych.Delete the native images of an assembly and its dependencies from the native image cache.

Aby odinstalować pojedynczy obraz i jego zależności, należy użyć tych samych argumentów wiersza polecenia, które zostały użyte podczas instalacji obrazu.To uninstall a single image and its dependencies, use the same command-line arguments that were used to install the image. Uwaga: Począwszy od .NET Framework 4, Akcja uninstall * nie jest już obsługiwana.Note: Starting with the .NET Framework 4, the action uninstall * is no longer supported.
update [/queue]update [/queue] Aktualizuje obrazy natywne, które stały się nieprawidłowe.Update native images that have become invalid.

Jeśli określono /queue, aktualizacje są umieszczane w kolejce dla usługi obrazów natywnych.If /queue is specified, the updates are queued for the native image service. Aktualizacje są zawsze planowane z priorytetem 3, więc są uruchamiane, gdy komputer znajduje się w stanie bezczynności.Updates are always scheduled at priority 3, so they run when the computer is idle.
display [assemblyName | assemblyPath]display [assemblyName | assemblyPath] Wyświetla stan obrazów natywnych dla zestawu i jego zależności.Display the state of the native images for an assembly and its dependencies.

Jeśli nie zostaną dostarczone argumenty, będą wyświetlane wszystkie dane z pamięci podręcznej obrazów natywnych.If no argument is supplied, everything in the native image cache is displayed.
executeQueuedItems [1|2|3]executeQueuedItems [1|2|3]

—lub—-or-

eqi [1|2|3]eqi [1|2|3]
Wykonuje umieszczone w kolejce zadania kompilacji.Execute queued compilation jobs.

Jeśli określono priorytet, wykonywane są zadania kompilacji z większym lub równym priorytetem.If a priority is specified, compilation jobs with greater or equal priority are executed. Jeśli nie określono priorytetu, wykonywane są wszystkie skolejkowane zadania kompilacji.If no priority is specified, all queued compilation jobs are executed.
queue {pause | continue | status}queue {pause | continue | status} Wstrzymuje usługę obrazów natywnych, zezwala wstrzymanej usłudze na kontynuowanie działania lub bada stan usługi.Pause the native image service, allow the paused service to continue, or query the status of the service.

ArgumentyArguments

ArgumentArgument OpisDescription
assemblyName Pełna nazwa wyświetlana zestawu.The full display name of the assembly. Na przykład "myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5".For example, "myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5". Uwaga: Dla akcji display i uninstall można podać częściową nazwę zestawu, taką jak myAssembly.Note: You can supply a partial assembly name, such as myAssembly, for the display and uninstall actions.

W jednym wierszu polecenia programu Ngen.exe można określić tylko jeden zestaw.Only one assembly can be specified per Ngen.exe command line.
assemblyPath Jawna ścieżka zestawu.The explicit path of the assembly. Można określić pełną lub względną ścieżkę.You can specify a full or relative path.

Jeśli użytkownik określi nazwę pliku bez ścieżki, zestaw musi znajdować się w bieżącym katalogu.If you specify a file name without a path, the assembly must be located in the current directory.

W jednym wierszu polecenia programu Ngen.exe można określić tylko jeden zestaw.Only one assembly can be specified per Ngen.exe command line.

Poziomy priorytetówPriority Levels

PriorytetPriority OpisDescription
1 Obrazy natywne są generowane i instalowane natychmiast, bez czekania na okres bezczynności.Native images are generated and installed immediately, without waiting for idle time.
2 Obrazy natywne są generowane i instalowane bez czekania na okres bezczynności, ale po zakończeniu wszystkich akcji z priorytetem 1 (i ich zależności).Native images are generated and installed without waiting for idle time, but after all priority 1 actions (and their dependencies) have completed.
3 Obrazy natywne są instalowane, gdy usługa obrazów natywnych wykryje, że komputer jest w stanie bezczynności.Native images are installed when the native image service detects that the computer is idle. Zobacz Native Image Service.See Native Image Service.

ScenariuszeScenarios

ScenariuszScenario OpisDescription
/Debug Generuje obrazy natywne, których można używać w debugerze.Generate native images that can be used under a debugger.
/Profile Generuje obrazy natywne, które mogą być używane w profilerze.Generate native images that can be used under a profiler.
/NoDependencies Generuje minimalną liczbę obrazów natywnych wymaganą przez opcje określonego scenariusza.Generate the minimum number of native images required by the specified scenario options.

KonfiguracjaConfig

KonfiguracjaConfiguration OpisDescription
/ExeConfig:``exePath/ExeConfig: exePath Używa konfiguracji określonego zestawu wykonywalnego.Use the configuration of the specified executable assembly.

Program Ngen.exe musi podjąć te same decyzje, co moduł ładowania podczas tworzenia powiązania z zależnościami.Ngen.exe needs to make the same decisions as the loader when binding to dependencies. Gdy składnik współużytkowany jest ładowany w czasie wykonywania, przy użyciu metody Load, plik konfiguracyjny aplikacji określa zależności, które są ładowane dla składnika współużytkowanego — na przykład wersję załadowanej zależności.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. Przełącznik /ExeConfig zapewnia wskazówki dotyczące programu Ngen. exe, na których zależności zostałyby załadowane w czasie wykonywania.The /ExeConfig switch gives Ngen.exe guidance on which dependencies would be loaded at run time.
/AppBase:``directoryPath/AppBase: directoryPath Podczas lokalizowania zależności należy użyć określonego katalogu jako podstawy aplikacji.When locating dependencies, use the specified directory as the application base.

OpcjeOptions

OpcjaOption OpisDescription
/nologo Pomija wyświetlanie transparentu startowego firmy Microsoft.Suppress the Microsoft startup banner display.
/silent Pomija wyświetlanie komunikatów o sukcesie.Suppress the display of success messages.
/verbose Wyświetla szczegółowe informacje na potrzeby debugowania.Display detailed information for debugging. Uwaga: Ze względu na ograniczenia systemu operacyjnego ta opcja nie wyświetla więcej informacji o systemach Windows 98 i 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, /? Wyświetla składnię polecenia i opcje dla aktualnego wydania.Display command syntax and options for the current release.

UwagiRemarks

Użytkownik musi mieć uprawnienia administracyjne, aby uruchomić program Ngen.exe.To run Ngen.exe, you must have administrative privileges.

Przestroga

Nie należy uruchamiać programu Ngen.exe dla zestawów, które nie są w pełni zaufane.Do not run Ngen.exe on assemblies that are not fully trusted. Począwszy od .NET Framework 4, Ngen. exe kompiluje zestawy z pełnym zaufaniem, a zasady zabezpieczeń dostępu kodu (CAS) nie są już oceniane.Starting with the .NET Framework 4, Ngen.exe compiles assemblies with full trust, and code access security (CAS) policy is no longer evaluated.

Począwszy od .NET Framework 4, obrazy natywne, które są generowane przy użyciu programu Ngen. exe, nie mogą być już ładowane do aplikacji, które działają w częściowej relacji zaufania.Starting with the .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. Zamiast tego wywoływany jest kompilator JIT (Just-In-Time).Instead, the just-in-time (JIT) compiler is invoked.

Program Ngen. exe generuje obrazy natywne dla zestawu określonego przez argument assemblyname do akcji install i wszystkich jej zależności.Ngen.exe generates native images for the assembly specified by the assemblyname argument to the install action and all its dependencies. Zależności są ustalane na podstawie odwołań w manifeście zestawu.Dependencies are determined from references in the assembly manifest. Jedyny scenariusz, w którym należy zainstalować zależność osobno, to kiedy aplikacja ładuje ją przy użyciu odbicia, na przykład przez wywołanie metody 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.

Ważne

Nie należy używać metody Assembly.LoadFrom z obrazami natywnymi.Do not use the Assembly.LoadFrom method with native images. Obraz załadowany za pomocą tej metody nie może być używany przez inne zestawy w kontekście wykonywania.An image loaded with this method cannot be used by other assemblies in the execution context.

Program Ngen.exe utrzymuje licznik zależności.Ngen.exe maintains a count on dependencies. Załóżmy na przykład, że MyAssembly.exe i YourAssembly.exe są zainstalowane w pamięci podręcznej obrazów natywnych, a obydwie zawierają odwołania do 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. Jeśli MyAssembly.exe zostanie odinstalowany, OurDependency.dll nie zostanie odinstalowany.If MyAssembly.exe is uninstalled, OurDependency.dll is not uninstalled. Jest on usuwany tylko wtedy, gdy YourAssembly.exe również zostanie odinstalowany.It is only removed when YourAssembly.exe is also uninstalled.

Jeśli jest generowany obraz natywny dla zestawu przechowywanego w globalnej pamięci podręcznej zestawów, należy określić jego nazwę wyświetlaną.If you are generating a native image for an assembly in the global assembly cache, specify its display name. Zobacz Assembly.FullName.See Assembly.FullName.

Obrazy natywne, które generuje program Ngen.exe, mogą być współużytkowane w różnych domenach aplikacji.The native images that Ngen.exe generates can be shared across application domains. Oznacza to, że można używać programu Ngen.exe w scenariuszach aplikacji, które wymagają współużytkowania zestawów w różnych domenach aplikacji.This means you can use Ngen.exe in application scenarios that require assemblies to be shared across application domains. Aby określić neutralność domeny:To specify domain neutrality:

Zawsze należy używać kodu neutralnego względem domeny podczas ładowania jego zestawu do wielu domen aplikacji.Always use domain-neutral code when loading the same assembly into multiple application domains. Jeśli obraz natywny zostanie załadowany do niewspółużytkowanej domeny aplikacji po załadowaniu do domeny współużytkowanej, nie będzie można go użyć.If a native image is loaded into a nonshared application domain after having been loaded into a shared domain, it cannot be used.

Uwaga

Kod neutralny względem domeny nie może zostać zwolniony i wydajność może być nieco niższa, szczególnie w przypadku uzyskiwania dostępu do statycznych elementów członkowskich.Domain-neutral code cannot be unloaded, and performance may be slightly slower, particularly when accessing static members.

W tej sekcji uwag:In this Remarks section:

Generowanie obrazów dla różnych scenariuszyGenerating images for different scenarios

Po wygenerowaniu obrazu natywnego zestawu środowisko uruchomieniowe automatycznie próbuje zlokalizować i używać tego obrazu natywnego przy każdym uruchomieniu zestawu.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. W zależności od scenariuszy użycia można generować wiele obrazów.Multiple images can be generated, depending on usage scenarios.

Na przykład w przypadku uruchomienia zestawu w scenariuszu debugowania lub profilowania środowisko uruchomieniowe szuka obrazu natywnego, który został wygenerowany przy użyciu opcji /Debug lub /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. Jeśli nie można odnaleźć pasującego obrazu natywnego, środowisko uruchomieniowe przywraca standardową kompilację JIT.If it is unable to find a matching native image, the runtime reverts to standard JIT compilation. Jedynym sposobem debugowania obrazów natywnych jest utworzenie obrazu natywnego z opcją /Debug.The only way to debug native images is to create a native image with the /Debug option.

Akcja uninstall rozpoznaje również scenariusze, dzięki czemu można odinstalować wszystkie scenariusze lub tylko wybrane scenariusze.The uninstall action also recognize scenarios, so you can uninstall all scenarios or only selected scenarios.

Ustalanie, kiedy należy używać obrazów natywnychDetermining when to Use native images

Obrazy natywne zapewniają poprawę wydajności w dwóch obszarach: ulepszone wykorzystanie pamięci i skrócenie czasu uruchamiania.Native images can provide performance improvements in two areas: improved memory use and reduced startup time.

Uwaga

Wydajność obrazów natywnych zależy od kilku czynników, które utrudniają analizę, takich jak wzorce dostępu kodu i danych, liczba wywołań, jakie miały miejsce między granicami modułów, a także liczba zależności, które zostały już załadowane przez inne aplikacje.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. Jedynym sposobem ustalenia, czy obrazy natywne przynoszą korzyść aplikacji, są dokładne pomiary wydajności w kluczowych scenariuszach wdrażania.The only way to determine whether native images benefit your application is by careful performance measurements in your key deployment scenarios.

Ulepszone użycie pamięciImproved memory use

Obrazy natywne mogą znacznie poprawić wykorzystanie pamięci, gdy kod jest współużytkowany w różnych procesach.Native images can significantly improve memory use when code is shared between processes. Obrazy natywne są plikami środowiska Windows PE, więc pojedyncza kopia pliku dll może być współużytkowana przez wiele procesów, natomiast kod natywny wytworzony przez kompilator JIT jest przechowywany w pamięci prywatnej i nie może być współużytkowany.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.

Aplikacje uruchamiane w ramach usług terminalowych również mogą korzystać z udostępnionych stron kodowych.Applications that are run under terminal services can also benefit from shared code pages.

Ponadto rezygnacja z ładowania kompilatora JIT umożliwia oszczędzenie określonej ilości pamięci dla każdego wystąpienia aplikacji.In addition, not loading the JIT compiler saves a fixed amount of memory for each application instance.

Szybsze uruchamianie aplikacjiFaster application startup

Wstępna kompilacja zestawów przy użyciu programu Ngen.exe może poprawić czas uruchamiania niektórych aplikacji.Precompiling assemblies with Ngen.exe can improve the startup time for some applications. Ogólnie rzecz biorąc, współużytkowanie zestawów składnika przez aplikacje przynosi zyski, ponieważ po uruchomieniu pierwszej aplikacji składniki współużytkowane są już załadowane dla kolejnych aplikacji.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. Podczas zimnego uruchamiania nie występują takie zyski z wykorzystania obrazów natywnych, ponieważ każdy zestaw aplikacji musi zostać załadowany z dysku twardego, przez co czas dostępu do dysku twardego przeważa zyski ze współużytkowania.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.

Trwałe powiązania mogą wpływać na czas uruchamiania, ponieważ wszystkie obrazy trwale powiązane z głównym zestawem aplikacji muszą zostać załadowane w tym samym czasie.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.

Uwaga

Przed .NET Framework 3,5 z dodatkiem Service Pack 1 należy umieścić udostępnione, silnie nazwane składniki w globalnej pamięci podręcznej zestawów, ponieważ moduł ładujący wykonuje dodatkową weryfikację dla zestawów o silnych nazwach, które nie znajdują się w globalnej pamięci podręcznej zestawów, co skutecznie eliminuje Poprawa czasu uruchamiania uzyskana przy użyciu obrazów natywnych.Before the .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. Optymalizacje wprowadzone w .NET Framework 3,5 z dodatkiem SP1 spowodowały usunięcie dodatkowej weryfikacji.Optimizations that were introduced in the .NET Framework 3.5 SP1 removed the extra validation.

Podsumowanie zagadnień dotyczących użyciaSummary of usage considerations

Następujące zagadnienia ogólne i dotyczące aplikacji mogą pomóc zadecydować, czy warto używać obrazów natywnych dla swojej aplikacji:The following general considerations and application considerations may assist you in deciding whether to undertake the effort of evaluating native images for your application:

  • Obrazy natywne są ładowane szybciej niż pliki MSIL, ponieważ eliminują potrzebę wykonywania wielu działań podczas uruchamiania, takich jak kompilacja JIT i weryfikacja bezpieczeństwa typów.Native images load faster than MSIL because they eliminate the need for many startup activities, such as JIT compilation and type-safety verification.

  • Obrazy natywne wymagają mniejszego początkowego zestawu roboczego, ponieważ nie ma potrzeby wczytywania kompilatora JIT.Native images require a smaller initial working set because there is no need for the JIT compiler.

  • Obrazy natywne umożliwiają współużytkowanie kodu przez różne procesy.Native images enable code sharing between processes.

  • Obrazy natywne wymagają więcej miejsca na dysku twardym niż zestawy MSIL, a ich generowanie może długo trwać.Native images require more hard disk space than MSIL assemblies and may require considerable time to generate.

  • Obrazy natywne muszą być obsługiwane.Native images must be maintained.

    • Obrazy muszą być generowane ponownie, gdy oryginalny zestaw lub jedna z jego zależności jest zmieniana.Images need to be regenerated when the original assembly or one of its dependencies is serviced.

    • Pojedynczy zestaw może wymagać wielu obrazów natywnych, aby można było używać go w różnych aplikacjach lub scenariuszach.A single assembly may need multiple native images for use in different applications or different scenarios. Na przykład informacje o konfiguracji w dwóch aplikacjach mogą powodować różne decyzje dotyczące powiązań dla tego samego zestawu zależnego.For example, the configuration information in two applications might result in different binding decisions for the same dependent assembly.

    • Obrazy natywne muszą być generowane przez administratora, czyli za pomocą konta systemu Windows z grupy Administratorzy.Native images must be generated by an administrator; that is, from a Windows account in the Administrators group.

Podczas określania, czy obrazy natywne mogą spowodować poprawę wydajności, oprócz tych ogólnych zagadnień, należy też rozważyć naturę aplikacji.In addition to these general considerations, the nature of your application must be considered when determining whether native images might provide a performance benefit:

  • Jeśli aplikacja działa w środowisku, w którym jest używanych wiele współużytkowanych składników, obrazy natywne umożliwią współużytkowanie składników przez wiele procesów.If your application runs in an environment that uses many shared components, native images allow the components to be shared by multiple processes.

  • Jeśli aplikacja używa wielu domen aplikacji, obrazy natywne umożliwią współużytkowanie stron kodu w różnych domenach.If your application uses multiple application domains, native images allow code pages to be shared across domains.

    Uwaga

    W wersjach 1.0 i 1.1 programu .NET Framework obrazów natywnych nie można współużytkować w różnych domenach aplikacji.In the .NET Framework versions 1.0 and 1.1, native images cannot be shared across application domains. Inaczej jest w wersji 2.0 i późniejszych.This is not the case in version 2.0 or later.

  • Jeśli aplikacja będzie uruchamiana na serwerze terminali, obrazy natywne umożliwią współużytkowanie stron kodu.If your application will be run under Terminal Server, native images allow sharing of code pages.

  • Zazwyczaj korzystne jest kompilowanie do obrazów natywnych dużych aplikacji.Large applications generally benefit from compilation to native images. Taka kompilacja małych aplikacje zazwyczaj nie przynosi korzyści.Small applications generally do not benefit.

  • W przypadku aplikacji działających przez długi czas kompilacja JIT w czasie wykonywania sprawdza się nieco lepiej niż obrazy natywne.For long-running applications, run-time JIT compilation performs slightly better than native images. (Trwałe powiązania mogą do pewnego stopnia złagodzić różnicę w wydajności).(Hard binding can mitigate this performance difference to some degree.)

Ważność adresów podstawowych zestawuImportance of assembly base addresses

Obrazy natywne są plikami środowiska Windows PE, więc dotyczą ich te same problemy zmiany podstawy, co innych plików wykonywalnych.Because native images are Windows PE files, they are subject to the same rebasing issues as other executable files. Spadek wydajności przy relokacji jest jeszcze bardziej widoczny, jeśli są stosowane powiązania trwałe.The performance cost of relocation is even more pronounced if hard binding is employed.

Aby ustawić adres podstawowy dla obrazu natywnego, należy użyć odpowiedniej opcji kompilatora, aby ustawić adres podstawowy dla zestawu.To set the base address for a native image, use the appropriate option of your compiler to set the base address for the assembly. Program Ngen.exe używa tego adresu podstawowego dla obrazu natywnego.Ngen.exe uses this base address for the native image.

Uwaga

Obrazy natywne są większe niż zestawy zarządzane, na podstawie których zostały utworzone.Native images are larger than the managed assemblies from which they were created. Adresy podstawowe muszą być obliczane tak, aby zezwalały na te większe rozmiary.Base addresses must be calculated to allow for these larger sizes.

Można użyć narzędzia, takiego jak dumpbin.exe, aby wyświetlić preferowany adres podstawowy obrazu natywnego.You can use a tool such as dumpbin.exe to view the preferred base address of a native image.

Twarde powiązanieHard binding

Trwałe powiązania zwiększają przepustowość i zmniejszają rozmiar zestawu roboczego dla obrazów natywnych.Hard binding increases throughput and reduces working set size for native images. Wadą trwałych powiązań jest fakt, że wszystkie obrazy, które są trwale powiązane z zestawem, muszą być ładowane razem z zestawem.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. Może to znacznie zwiększyć czas uruchamiania dużych aplikacji.This can significantly increase startup time for a large application.

Trwałe powiązanie jest odpowiednie dla zależności, które są ładowane we wszystkich krytycznych pod względem wydajności scenariuszach aplikacji.Hard binding is appropriate for dependencies that are loaded in all your application's performance-critical scenarios. Podobnie jak w przypadku każdego aspektu wykorzystania obrazu natywnego, staranne wykonywanie pomiarów wydajności jest jedynym sposobem ustalenia, czy trwałe powiązanie zwiększa wydajność aplikacji.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.

Atrybuty DependencyAttribute i DefaultDependencyAttribute umożliwiają udostępnianie twardych wskazówek do programu Ngen. exe.The DependencyAttribute and DefaultDependencyAttribute attributes allow you to provide hard binding hints to Ngen.exe.

Uwaga

Te atrybuty są wskazówkami dla programu Ngen.exe, a nie poleceniami.These attributes are hints to Ngen.exe, not commands. Użycie ich nie gwarantuje uzyskania trwałego powiązania.Using them does not guarantee hard binding. Znaczenie tych atrybutów może się zmieniać w przyszłych wersjach.The meaning of these attributes may change in future releases.

Określanie wskazówki dotyczącej powiązań dla zależnościSpecifying a binding hint for a dependency

Zastosuj DependencyAttribute do zestawu, aby wskazać prawdopodobieństwo załadowania określonej zależności.Apply the DependencyAttribute to an assembly to indicate the likelihood that a specified dependency will be loaded. LoadHint.Always wskazuje, że stałe powiązanie jest odpowiednie, Default wskazuje, że wartość domyślna dla zależności powinna być używana, a Sometimes wskazuje, że twarde powiązanie nie jest odpowiednie.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.

Poniższy kod pokazuje atrybuty dla zestawu mającego dwie zależności.The following code shows the attributes for an assembly that has two dependencies. Pierwsza zależność (Assembly1) jest odpowiednim kandydatem dla trwałego powiązania, ale druga zależność (Assembly2) nie jest.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)];

Nazwa zestawu nie zawiera rozszerzenia nazwy pliku.The assembly name does not include the file name extension. Można używać nazw wyświetlanych.Display names can be used.

Określanie domyślnej wskazówki dotyczącej powiązań dla zestawuSpecifying a default binding hint for an assembly

Domyślne wskazówki powiązania potrzebne są tylko zestawom, które będą stosowane natychmiastowo i często przez dowolną aplikację, która jest od nich zależna.Default binding hints are only needed for assemblies that will be used immediately and frequently by any application that has a dependency on them. Zastosuj DefaultDependencyAttribute z LoadHint.Always do takich zestawów, aby określić, że ma zostać użyte twarde powiązanie.Apply the DefaultDependencyAttribute with LoadHint.Always to such assemblies to specify that hard binding should be used.

Uwaga

Nie istnieje powód, aby zastosować DefaultDependencyAttribute do zestawów dll, które nie należą do tej kategorii, ponieważ zastosowanie atrybutu z jakąkolwiek wartością inną niż LoadHint.Always ma ten sam skutek, co w ogóle nie stosuje atrybutu.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.

Firma Microsoft używa DefaultDependencyAttribute, aby określić, że stałe powiązanie jest wartością domyślną dla bardzo niewielkiej liczby zestawów w .NET Framework, takiej jak 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.

Przetwarzanie OdroczoneDeferred processing

Generowanie obrazów natywnych dla bardzo dużych aplikacji może zająć znaczną ilość czasu.Generation of native images for a very large application can take considerable time. Podobnie zmiany składnika współużytkowanego lub zmiany w ustawieniach komputera mogą wymagać aktualizacji wielu obrazów natywnych.Similarly, changes to a shared component or changes to computer settings might require many native images to be updated. Akcje install i update mają /queue opcję, która kolejkuje operację dla odroczonego wykonania przez usługę obrazu natywnego.The install and update actions have a /queue option that queues the operation for deferred execution by the native image service. Ponadto program Ngen. exe ma queue i executeQueuedItems akcje, które zapewniają kontrolę nad usługą.In addition, Ngen.exe has queue and executeQueuedItems actions that provide some control over the service. Aby uzyskać więcej informacji, zobacz Native Image Service.For more information, see Native Image Service.

Obrazy natywne i kompilacja JITNative images and JIT compilation

Jeśli program Ngen.exe napotka w zestawie jakiekolwiek metody, których nie może wygenerować, wyklucza je z obrazu natywnego.If Ngen.exe encounters any methods in an assembly that it cannot generate, it excludes them from the native image. Gdy środowisko uruchomieniowe wykonuje zestaw, przywraca kompilację JIT dla metod, które nie zostały uwzględnione w obrazie natywnym.When the runtime executes this assembly, it reverts to JIT compilation for the methods that were not included in the native image.

Ponadto obrazy natywne nie są używane, jeśli zestaw został uaktualniony lub jeśli obraz został unieważniony z jakiegokolwiek powodu.In addition, native images are not used if the assembly has been upgraded, or if the image has been invalidated for any reason.

Nieprawidłowe obrazyInvalid images

Użycie programu Ngen.exe w celu utworzenia obrazu natywnego zestawu powoduje, że dane wyjściowe zależą od opcji wiersza polecenia, które można określić, i niektórych ustawień na komputerze.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. Są to m.in. następujące ustawienia:These settings include the following:

  • Wersja programu .NET Framework.The version of the .NET Framework.

  • Wersja systemu operacyjnego, jeśli zmiana pochodzi z rodziny Windows 9X do rodziny systemu Windows NT.The version of the operating system, if the change is from the Windows 9x family to the Windows NT family.

  • Dokładna tożsamość zestawu (ponowna kompilacja zmienia tożsamość).The exact identity of the assembly (recompilation changes identity).

  • Dokładna tożsamość wszystkich zestawów, do których odwołuje się zestaw (ponowna kompilacja zmienia tożsamość).The exact identity of all assemblies that the assembly references (recompilation changes identity).

  • Czynniki związane z zabezpieczeniami.Security factors.

Program Ngen.exe rejestruje te informacje podczas generowania obrazu natywnego.Ngen.exe records this information when it generates a native image. Podczas wykonywania zestawu środowisko uruchomieniowe poszukuje obrazu natywnego wygenerowanego z użyciem opcji i ustawień, które odpowiadają bieżącemu środowisku komputera.When you execute an assembly, the runtime looks for the native image generated with options and settings that match the computer's current environment. Jeśli nie można odnaleźć pasującego obrazu natywnego, środowisko uruchomieniowe przywraca kompilację JIT zestawu.The runtime reverts to JIT compilation of an assembly if it cannot find a matching native image. Następujące zmiany w ustawieniach komputera i środowiska powodują, że obrazy natywne stają się nieprawidłowe:The following changes to a computer's settings and environment cause native images to become invalid:

  • Wersja programu .NET Framework.The version of the .NET Framework.

    Jeśli zastosowano aktualizację programu .NET Framework, wszystkie obrazy natywne utworzone przy użyciu programu Ngen.exe stają się nieprawidłowe.If you apply an update to the .NET Framework, all native images that you have created using Ngen.exe become invalid. Z tego powodu wszystkie aktualizacje .NET Framework wykonać polecenie Ngen Update, aby upewnić się, że wszystkie obrazy natywne zostaną ponownie wygenerowane.For this reason, all updates of the .NET Framework execute the Ngen Update command, to ensure that all native images are regenerated. Program .NET Framework automatycznie tworzy nowe obrazy natywne dla bibliotek programu .NET Framework, które instaluje.The .NET Framework automatically creates new native images for the .NET Framework libraries that it installs.

  • Wersja systemu operacyjnego, jeśli zmiana pochodzi z rodziny Windows 9X do rodziny systemu Windows NT.The version of the operating system, if the change is from the Windows 9x family to the Windows NT family.

    Na przykład jeśli wersja systemu operacyjnego działającego na komputerze zmienia się z systemu Windows 98 na system Windows XP, wszystkie obrazy natywne przechowywane w pamięci podręcznej obrazów natywnych staną się nieprawidłowe.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. Jeśli jednak system operacyjny ulegnie zmianie z systemu Windows 2000 do systemu Windows XP, obrazy nie zostaną unieważnione.However, if the operating system changes from Windows 2000 to Windows XP, the images are not invalidated.

  • Dokładna tożsamość zestawu.The exact identity of the assembly.

    Jeśli zestaw zostanie ponownie skompilowany, obraz natywny odpowiadający zestawowi staje się nieprawidłowy.If you recompile an assembly, the assembly's corresponding native image becomes invalid.

  • Dokładna tożsamość jakichkolwiek zestawów, do których odwołuje się zestaw.The exact identity of any assemblies the assembly references.

    Jeżeli zestaw zarządzany zostanie zaktualizowany, wszystkie obrazy natywne zależne bezpośrednio lub pośrednio od tego zestawu stają się nieprawidłowe i muszą zostać wygenerowane ponownie.If you update a managed assembly, all native images that directly or indirectly depend on that assembly become invalid and need to be regenerated. Obejmuje to zarówno zwykłe odwołania, jak i trwale powiązane zależności.This includes both ordinary references and hard-bound dependencies. Za każdym razem, gdy aktualizacja oprogramowania zostanie zastosowana, program instalacyjny powinien wykonać polecenie Ngen Update, aby upewnić się, że wszystkie zależne obrazy natywne zostaną ponownie wygenerowane.Whenever a software update is applied, the installation program should execute an Ngen Update command to ensure that all dependent native images are regenerated.

  • Czynniki związane z zabezpieczeniami.Security factors.

    Zmiana zasad zabezpieczeń komputera ograniczająca uprawnienia udzielone uprzednio zestawowi może spowodować, że poprzednio skompilowane obrazy natywne dla tego zestawu staną się nieprawidłowe.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.

    Aby uzyskać szczegółowe informacje na temat sposobu, w jaki środowisko uruchomieniowe języka wspólnego administruje zabezpieczeniami dostępu kodu i jak korzystać z uprawnień, zobacz zabezpieczenia dostępu kodu.For detailed information about how the common language runtime administers code access security and how to use permissions, see Code Access Security.

Rozwiązywanie problemówTroubleshooting

Poniższe tematy dotyczące rozwiązywania problemów umożliwiają sprawdzenie, które obrazy natywne są używane i które nie mogą być używane przez aplikację, aby określić, kiedy kompilator JIT zaczyna kompilować metodę, i pokazuje, jak zrezygnować z kompilacji obrazu natywnego określonego form.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.

podgląd dziennika powiązań zestawówAssembly Binding Log Viewer

Aby potwierdzić, że obrazy natywne są używane przez aplikację, można użyć Fuslogvw. exe (Podgląd dziennika powiązań zestawów).To confirm that native images are being used by your application, you can use the Fuslogvw.exe (Assembly Binding Log Viewer). Wybierz opcję obrazy natywne w polu kategorie dzienników w oknie Przeglądarka dzienników powiązań.Select Native Images in the Log Categories box on the binding log viewer window. Program Fuslogvw.exe dostarcza informacje o tym, dlaczego obraz natywny został odrzucony.Fuslogvw.exe provides information about why a native image was rejected.

Asystent debugowania zarządzanego JITCompilationStartThe JITCompilationStart managed debugging assistant

Za pomocą asystenta debugowania zarządzanego jitCompilationStart (MDA) można określić, kiedy kompilator JIT zacznie kompilować funkcję.You can use the jitCompilationStart managed debugging assistant (MDA) to determine when the JIT compiler starts to compile a function.

Rezygnacja z generowania obrazu natywnegoOpting out of native image generation

W niektórych przypadkach program NGen. exe może mieć problemy z generowaniem obrazu natywnego dla określonej metody lub można preferować, aby Metoda była skompilowana JIT, a następnie skompilowana do obrazu natywnego.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. W takim przypadku można użyć atrybutu System.Runtime.BypassNGenAttribute, aby zapobiec generowaniu przez program NGen. exe obrazu natywnego dla określonej metody.In this case, you can use the System.Runtime.BypassNGenAttribute attribute to prevent NGen.exe from generating a native image for a particular method. Ten atrybut musi być zastosowany indywidualnie dla każdej metody, której kod nie ma być dołączony do obrazu natywnego.The attribute must be applied individually to each method whose code you do not want to include in the native image. Program NGen. exe rozpoznaje atrybut i nie generuje kodu w obrazie natywnym dla odpowiadającej metody.NGen.exe recognizes the attribute and does not generate code in the native image for the corresponding method.

Należy jednak pamiętać, że BypassNGenAttribute nie jest zdefiniowany jako typ w bibliotece klas .NET Framework.Note, however, that BypassNGenAttribute is not defined as a type in the .NET Framework Class Library. Aby można było użyć atrybutu w kodzie, należy najpierw zdefiniować go w następujący sposób:In order to consume the attribute in your code, you must first define it as follows:

namespace System.Runtime
{
   [AttributeUsage(AttributeTargets.Method | 
                   AttributeTargets.Constructor | 
                   AttributeTargets.Property)]
   public class BypassNGenAttribute : Attribute 
   {
   }   
}
Namespace System.Runtime
   <AttributeUsage(AttributeTargets.Method Or 
                   AttributeTargets.Constructor Or 
                   AttributeTargets.Property)>
   Public Class BypassNGenAttribute : Inherits Attribute 
   End Class   
End Namespace

Następnie można zastosować atrybut dla poszczególnych metod.You can then apply the attribute on a per-method basis. Poniższy przykład instruuje Generator obrazu natywnego, że nie powinien generować obrazu natywnego dla metody 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

PrzykładyExamples

Następujące polecenie generuje obraz natywny dla ClientApp.exe, znajdujący się w bieżącym katalogu, i instaluje go w pamięci podręcznej obrazów natywnych.The following command generates a native image for ClientApp.exe, located in the current directory, and installs the image in the native image cache. Jeśli istnieje plik konfiguracji zestawu, program Ngen.exe go użyje.If a configuration file exists for the assembly, Ngen.exe uses it. Ponadto w przypadku plików DLL, do których odClientApp.exe się odwołania, są generowane obrazy natywne.In addition, native images are generated for any .dll files that ClientApp.exe references.

ngen install ClientApp.exe

Obraz instalowany za pomocą programu Ngen.exe jest również nazywany elementem głównym.An image installed with Ngen.exe is also called a root. Elementem głównym może być aplikacja albo składnik współużytkowany.A root can be an application or a shared component.

Następujące polecenie generuje obraz natywny dla MyAssembly.exe z określoną ścieżką.The following command generates a native image for MyAssembly.exe with the specified path.

ngen install c:\myfiles\MyAssembly.exe

Podczas lokalizowania zestawów i ich zależności program Ngen.exe używa tej samej logiki badania, co środowisko uruchomieniowe języka wspólnego (CLR).When locating assemblies and their dependencies, Ngen.exe uses the same probing logic used by the common language runtime. Domyślnie katalog zawierający ClientApp.exe jest używany jako katalog podstawowy aplikacji, a wszystkie sondy zestawu zaczynają się w tym katalogu.By default, the directory that contains ClientApp.exe is used as the application base directory, and all assembly probing begins in this directory. To zachowanie można zastąpić przy użyciu opcji /AppBase.You can override this behavior by using the /AppBase option.

Uwaga

Zachowanie to różni się od zachowania programu Ngen.exe w wersjach 1.0 i 1.1 programu .NET Framework, gdzie podstawa aplikacji znajduje się w bieżącym katalogu.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.

Zestaw może mieć zależność bez odwołania, na przykład jeśli ładuje plik DLL za pomocą metody 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. Można utworzyć obraz natywny dla takiego pliku dll przy użyciu informacji konfiguracyjnych dla zestawu aplikacji z opcją /ExeConfig.You can create a native image for such a .dll file by using configuration information for the application assembly, with the /ExeConfig option. Następujące polecenie generuje obraz natywny dla MyLib.dll, przy użyciu informacji o konfiguracji z 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

Zestawy instalowane w ten sposób nie są usuwane, gdy jest usuwana aplikacja.Assemblies installed in this way are not removed when the application is removed.

Aby odinstalować zależność, należy użyć tych samych opcji wiersza polecenia, które zostały użyte podczas jej instalowania.To uninstall a dependency, use the same command-line options that were used to install it. Poniższe polecenie Odinstalowuje MyLib.dll z poprzedniego przykładu.The following command uninstalls the MyLib.dll from the previous example.

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

Aby utworzyć obraz natywny dla zestawu w globalnej pamięci podręcznej zestawów, należy użyć nazwy wyświetlanej zestawu.To create a native image for an assembly in the global assembly cache, use the display name of the assembly. Na przykład:For example:

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

Program NGen.exe generuje oddzielny zestaw obrazów dla każdego instalowanego scenariusza.NGen.exe generates a separate set of images for each scenario you install. Na przykład poniższe polecenia instalują kompletny zestaw obrazów natywnych dla normalnych operacji, drugi kompletny zestaw na potrzeby debugowania i trzeci na potrzeby profilowania: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

Wyświetlanie pamięci podręcznej obrazów natywnychDisplaying the Native Image Cache

Obrazy natywne zainstalowane w pamięci podręcznej można wyświetlić przy użyciu programu Ngen.exe.Once native images are installed in the cache, they can be displayed using Ngen.exe. Poniższe polecenie wyświetla wszystkie obrazy natywne znajdujące się w pamięci podręcznej obrazów natywnych.The following command displays all native images in the native image cache.

ngen display

Akcja display najpierw wyświetla listę wszystkich zestawów głównych, a następnie listę wszystkich obrazów natywnych na komputerze.The display action lists all the root assemblies first, followed by a list of all the native images on the computer.

Prosta nazwa zestawu służy do wyświetlania informacji dotyczących tylko tego zestawu.Use the simple name of an assembly to display information only for that assembly. Następujące polecenie wyświetla wszystkie obrazy natywne w pamięci podręcznej obrazów natywnych, które pasują do nazwy częściowej MyAssembly, ich zależności i wszystkich katalogów głównych, które mają zależność od 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

Informacje o tym, które elementy główne są zależne od zestawu współużytkowanego składnika, są przydatne w ocenyie wpływu akcji update po uaktualnieniu składnika współużytkowanego.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.

Aby określić rozszerzenie pliku zestawu, należy określić ścieżkę lub wykonać program Ngen.exe z katalogu zawierającego zestaw: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

Następujące polecenie wyświetla wszystkie obrazy natywne w pamięci podręcznej obrazów natywnych o nazwie MyAssembly i wersji 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"

Aktualizacja obrazówUpdating Images

Obrazy są zazwyczaj aktualizowane po uaktualnieniu składnika współużytkowanego.Images are typically updated after a shared component has been upgraded. Aby zaktualizować wszystkie obrazy natywne, które uległy zmianie lub których zależności uległy zmianie, użyj akcji update bez argumentów.To update all native images that have changed, or whose dependencies have changed, use the update action with no arguments.

ngen update

Aktualizacja wszystkich obrazów może być długotrwałym procesem.Updating all images can be a lengthy process. Można kolejkować aktualizacje do wykonania przez usługę obrazu macierzystego przy użyciu opcji /queue.You can queue the updates for execution by the native image service by using the /queue option. Aby uzyskać więcej informacji na temat /queue opcji i priorytetów instalacji, zobacz Native Image Service.For more information on the /queue option and installation priorities, see Native Image Service.

ngen update /queue

Odinstalowywanie obrazówUninstalling Images

Program Ngen.exe utrzymuje listę zależności, aby składniki współużytkowane były usuwane tylko wtedy, gdy wszystkie zestawy, które od nich zależą, zostały usunięte.Ngen.exe maintains a list of dependencies, so that shared components are removed only when all assemblies that depend on them have been removed. Ponadto współużytkowany składnik nie zostanie usunięty, jeśli został zainstalowany jako element główny.In addition, a shared component is not removed if it has been installed as a root.

Następujące polecenie Odinstalowuje wszystkie scenariusze dla ClientApp.exegłównej:The following command uninstalls all scenarios for the root ClientApp.exe:

ngen uninstall ClientApp

Akcja uninstall może służyć do usuwania konkretnych scenariuszy.The uninstall action can be used to remove specific scenarios. Następujące polecenie Odinstalowuje wszystkie scenariusze debugowania dla ClientApp.exe:The following command uninstalls all debug scenarios for ClientApp.exe:

ngen uninstall ClientApp /debug

Uwaga

Odinstalowanie scenariuszy /debug nie powoduje odinstalowania scenariusza, w którym znajdują się zarówno /profile, jak i /debug.Uninstalling /debug scenarios does not uninstall a scenario that includes both /profile and /debug.

Następujące polecenie Odinstalowuje wszystkie scenariusze dla określonej wersji ClientApp.exe:The following command uninstalls all scenarios for a specific version of ClientApp.exe:

ngen uninstall "ClientApp, Version=1.0.0.0"

Następujące polecenia Odinstalowuje wszystkie scenariusze dla "ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL", lub tylko scenariusza debugowania dla tego zestawu: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

Podobnie jak w przypadku akcji install, dostarczenie rozszerzenia wymaga wykonania programu Ngen. exe z katalogu zawierającego zestaw lub określenia pełnej ścieżki.As with the install action, supplying an extension requires either executing Ngen.exe from the directory containing the assembly or specifying a full path.

Aby zapoznać się z przykładami dotyczącymi usługi obrazów natywnych, zobacz Native Image Service.For examples relating to the native image service, see Native Image Service.

Obraz macierzysty — zadanieNative Image Task

Zadanie obrazu natywnego to zadanie systemu Windows, które generuje i utrzymuje obrazy natywne.The native image task is a Windows task that generates and maintains native images. Zadanie obrazu natywnego generuje i automatycznie przejmuje obrazy natywne dla obsługiwanych scenariuszy.The native image task generates and reclaims native images automatically for supported scenarios. Umożliwia także instalatorom używanie programu Ngen. exe (Generator obrazu natywnego) do tworzenia i aktualizowania obrazów natywnych w odłożonym czasie.It also enables installers to use Ngen.exe (Native Image Generator) to create and update native images at a deferred time.

Zadanie obrazu natywnego jest rejestrowane raz dla każdej architektury procesora obsługiwanej na komputerze, aby umożliwić kompilację dla aplikacji przeznaczonych dla każdej architektury:The native image task is registered once for each CPU architecture supported on a computer, to allow compilation for applications that target each architecture:

Nazwa zadaniaTask name 32-bitowy komputer32-bit computer 64-bitowy komputer64-bit computer
.NET Framework NGEN v 4.0.30319NET Framework NGEN v4.0.30319 TakYes TakYes
.NET Framework NGEN v 4.0.30319 64NET Framework NGEN v4.0.30319 64 NieNo TakYes

Zadanie obrazu natywnego jest dostępne w .NET Framework 4,5 i nowszych wersjach, gdy działa w systemie Windows 8 lub nowszym.The native image task is available in the .NET Framework 4.5 and later versions, when running on Windows 8 or later. We wcześniejszych wersjach systemu Windows .NET Framework używa usługi obrazów natywnych.On earlier versions of Windows, the .NET Framework uses the Native Image Service.

Okres istnienia zadaniaTask Lifetime

Ogólnie rzecz biorąc, Harmonogram zadań systemu Windows uruchamia zadanie obrazu natywnego co noc, gdy komputer jest w stanie bezczynności.In general, the Windows Task Scheduler starts the native image task every night when the computer is idle. Zadanie sprawdza wszystkie odroczone zadania, które są umieszczane w kolejce przez instalatorów aplikacji, wszystkie odroczone żądania aktualizacji obrazów natywnych i wszelkie automatyczne tworzenie obrazu.The task checks for any deferred work that is queued by application installers, any deferred native image update requests, and any automatic image creation. Zadanie kończy zaległe elementy robocze, a następnie zamyka.The task completes outstanding work items and then shuts down. Jeśli komputer przestanie być bezczynny, gdy zadanie jest uruchomione, zadanie zostanie zatrzymane.If the computer stops being idle while the task is running, the task stops.

Możesz również ręcznie uruchomić zadanie natywnego obrazu za pomocą interfejsu użytkownika Harmonogram zadań lub ręcznie wywołania programu NGen. exe.You can also start the native image task manually through the Task Scheduler UI or through manual calls to NGen.exe. Jeśli zadanie zostało rozpoczęte za pomocą jednej z tych metod, będzie ono nadal działać, gdy komputer nie będzie już w stanie bezczynności.If the task is started through either of these methods, it will continue running when the computer is no longer idle. Obrazy tworzone ręcznie przy użyciu programu NGen. exe są priorytetowe w celu włączenia przewidywalnego zachowania dla instalatorów aplikacji.Images created manually by using NGen.exe are prioritized to enable predictable behavior for application installers.

Usługa obrazu macierzystegoNative Image Service

Natywna usługa obrazów to usługa systemu Windows, która generuje i utrzymuje obrazy natywne.The native image service is a Windows service that generates and maintains native images. Usługa obrazów natywnych umożliwia deweloperom odroczenie instalacji i aktualizacji obrazów natywnych na okresy, gdy komputer jest w stanie bezczynności.The native image service allows the developer to defer the installation and update of native images to periods when the computer is idle.

Zwykle usługa obrazów natywnych jest inicjowana przez program instalacyjny (Instalator) dla aplikacji lub aktualizacji.Normally, the native image service is initiated by the installation program (installer) for an application or update. W przypadku akcji o priorytecie 3 usługa jest wykonywana w czasie bezczynności na komputerze.For priority 3 actions, the service executes during idle time on the computer. Usługa zapisuje swój stan i umożliwia kontynuowanie wielu ponownych uruchomień, jeśli jest to konieczne.The service saves its state and is capable of continuing through multiple reboots if necessary. Kompilacja wielu obrazów może być umieszczona w kolejce.Multiple image compilations can be queued.

Usługa również współdziała z ręcznym poleceniem Ngen. exe.The service also interacts with the manual Ngen.exe command. Polecenia ręczne mają pierwszeństwo przed działaniami w tle.Manual commands take precedence over background activity.

Uwaga

W systemie Windows Vista Nazwa wyświetlana dla usługi obrazów natywnych to "Microsoft.NET Framework NGEN v 2.0.50727 _X86" lub "Microsoft.NET Framework NGEN v 2.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". We wszystkich wcześniejszych wersjach systemu Microsoft Windows nazwa to "Optymalizacja środowiska uruchomieniowego platformy .NET w usłudze 2.0.50727 _X86" lub "środowisko optymalizacji środowiska uruchomieniowego platformy .NET w 2.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".

Uruchamianie odroczonych operacjiLaunching Deferred Operations

Przed rozpoczęciem instalacji lub uaktualnienia zaleca się wstrzymywanie usługi.Before beginning an installation or upgrade, pausing the service is recommended. Gwarantuje to, że usługa nie zostanie wykonana, podczas gdy Instalator kopiuje pliki lub umieszcza zestawy w globalnej pamięci podręcznej zestawów.This ensures that the service does not execute while the installer is copying files or putting assemblies in the global assembly cache. Następujący wiersz polecenia Ngen. exe wstrzymuje usługę:The following Ngen.exe command line pauses the service:

ngen queue pause

Po dodaniu wszystkich odroczonych operacji do kolejki następujące polecenie umożliwia wznowienie działania usługi:When all deferred operations have been queued, the following command allows the service to resume:

ngen queue continue

Aby odroczyć generowanie obrazu natywnego podczas instalowania nowej aplikacji lub podczas aktualizowania składnika współużytkowanego, użyj opcji /queue z akcjami install lub 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. Poniższe wiersze poleceń Ngen. exe instalują obraz macierzysty dla składnika współużytkowanego i przeprowadzają aktualizację wszystkich katalogów głównych, które mogły mieć to oddziaływać: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

Akcja update ponownie generuje wszystkie obrazy natywne, które zostały unieważnione, a nie tylko te, które używają MyComponent.The update action regenerates all native images that have been invalidated, not just those that use MyComponent.

Jeśli aplikacja składa się z wielu katalogów głównych, można kontrolować priorytet akcji odroczonych.If your application consists of many roots, you can control the priority of the deferred actions. Następujące polecenia kolejką instalację trzech katalogów głównych.The following commands queue the installation of three roots. Assembly1 jest zainstalowany jako pierwszy, bez czekania na czas bezczynności.Assembly1 is installed first, without waiting for idle time. Assembly2 jest również instalowany bez oczekiwania na czas bezczynności, ale po zakończeniu wszystkich akcji o priorytecie 1.Assembly2 is also installed without waiting for idle time, but after all priority 1 actions have completed. Assembly3 jest instalowany, gdy usługa wykryje, że komputer jest w stanie bezczynności.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

Można wymusić, aby kolejkowane akcje były wykonywane synchronicznie za pomocą akcji executeQueuedItems.You can force queued actions to occur synchronously by using the executeQueuedItems action. W przypadku podania opcjonalnego priorytetu ta akcja ma wpływ tylko na akcje znajdujące się w kolejce, które mają równy lub niższy priorytet.If you supply the optional priority, this action affects only the queued actions that have equal or lower priority. Domyślny priorytet to 3, dlatego następujące polecenie Ngen. exe natychmiast przetwarza wszystkie akcje w kolejce i nie zwraca do momentu zakończenia: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

Polecenia synchroniczne są wykonywane przez program Ngen. exe i nie używają usługi obrazów natywnych.Synchronous commands are executed by Ngen.exe and do not use the native image service. Akcje można wykonywać przy użyciu programu Ngen. exe, gdy jest uruchomiona usługa obrazów natywnych.You can execute actions using Ngen.exe while the native image service is running.

Zamykanie usługiService Shutdown

Po zainicjowaniu przez wykonanie polecenia Ngen. exe zawierającego opcję /queue usługa zostanie uruchomiona w tle do momentu zakończenia wszystkich akcji.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. Usługa zapisuje swój stan, aby umożliwić kontynuowanie wielu ponownych uruchomień, jeśli jest to konieczne.The service saves its state so that it can continue through multiple reboots if necessary. Gdy usługa wykryje, że nie ma więcej akcji w kolejce, resetuje jej stan tak, aby nie był uruchamiany ponownie przy następnym uruchomieniu komputera, a następnie zostanie zamknięty.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.

Interakcja z klientami usługiService Interaction with Clients

W .NET Framework w wersji 2,0 jedyną interakcją z usługą obrazów natywnych jest użycie narzędzia wiersza polecenia 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. Użyj narzędzia wiersza polecenia w skryptach instalacyjnych, aby kolejkować akcje dla usługi obrazów natywnych i współdziałać z usługą.Use the command-line tool in installation scripts to queue actions for the native image service and to interact with the service.

Zobacz takżeSee also