Ngen.exe (generátor nativních obrázků)

Generátor nativních bitových kopií (Ngen.exe) je nástroj zvyšující výkon spravovaných aplikací. Nástroj Ngen.exe vytváří nativní bitové kopie, což jsou soubory obsahující zkompilovaný strojový kód specifický pro procesor, a instaluje je do mezipaměti nativních bitových kopií v místním počítači. Modul runtime může ke kompilaci původního sestavení použít nativní bitové kopie z mezipaměti namísto kompilátoru JIT (just-in-time).

Poznámka:

Ngen.exe kompiluje nativní bitové kopie pro sestavení, která cílí pouze na rozhraní .NET Framework. Ekvivalentní generátor nativních imagí pro .NET Core je CrossGen.

Změny Ngen.exe v rozhraní .NET Framework 4:

  • Nástroj Ngen.exe nyní kompiluje sestavení s úplnou důvěryhodností, přičemž zabezpečení přístupu kódu (CAS) již není vyhodnocováno.

  • Nativní bitové kopie generované nástrojem Ngen.exe již nemohou být načteny do aplikací spuštěných s částečnou důvěryhodností.

Změny nástroje Ngen.exe v rozhraní .NET Framework verze 2.0:

  • Instalace sestavení nainstaluje také jeho závislosti, což zjednodušuje syntaxi nástroje Ngen.exe.

  • Nativní bitové kopie mohou být nyní sdíleny napříč doménami aplikací.

  • Nová akce , updateznovu vytvoří image, které byly zneplatněna.

  • Pro generování a instalaci bitových kopií může být spuštění akcí odloženo službou využívající dobu nečinnosti.

  • Některé příčiny zneplatnění bitové kopie byly odstraněny.

Ve Windows 8 viz Úloha nativní bitové kopie.

Další informace o používání Ngen.exe a službě nativní bitové kopie najdete v tématu Služba nativních imagí.

Poznámka:

Ngen.exe syntaxi pro verze 1.0 a 1.1 rozhraní .NET Framework najdete ve starší syntaxi generátoru nativních imagí (Ngen.exe).

Tento nástroj je automaticky nainstalován se sadou Visual Studio. Ke spuštění nástroje použijte Visual Studio Developer Command Prompt nebo Visual Studio Developer PowerShell.

Na příkazovém řádku zadejte následující:

Syntaxe

ngen action [options]
ngen /? | /help

Akce

V následující tabulce je uvedena syntaxe jednotlivých action. Popis jednotlivých částí objektu actionnaleznete v tabulkách Argumenty, Úrovně priority, Scénáře a Konfigurační tabulky. Tabulka Možnosti popisuje options přepínače nápovědy a přepínače nápovědy.

Akce Popis
install[assemblyName | assemblyPath] [] [configscenarios] [/queue[{1|:|23}]] Vygeneruje nativní bitové kopie sestavení a jeho závislosti a nainstaluje bitové kopie do mezipaměti nativních bitových kopií.

Pokud /queue je zadáno, akce se zařadí do fronty pro službu nativní bitové kopie. Výchozí hodnota priority je 3. Podívejte se na tabulku Úrovně priority.
uninstall[] [assemblyName | assemblyPath] [configscenarios] Odstraní nativní bitové kopie sestavení a jeho závislosti z mezipaměti nativních bitových kopií.

Chcete-li odinstalovat pouze jednu bitovou kopii a její závislosti, použijte stejné argumenty příkazového řádku, které byly použity při instalaci kopie. Poznámka: Počínaje rozhraním .NET Framework 4 již není akce uninstall * podporována.
update [/queue] Aktualizuje nativní bitové kopie, které se staly neplatnými.

Pokud /queue je zadáno, aktualizace se zařadí do fronty pro službu nativní bitové kopie. Aktualizace jsou vždy naplánovány s prioritou 3, jsou tedy spouštěny při nečinnosti počítače.
display [assemblyName | assemblyPath] Zobrazí stav nativních bitových kopií pro sestavení a jeho závislosti.

Není-li zadán žádný argument, je zobrazen celý obsah mezipaměti nativních bitových kopií.
executeQueuedItems [1|2|3]

nebo

eqi [1|2|3]
Spustí úlohy kompilace ve frontě.

Je-li zadána priorita, jsou spuštěny úlohy kompilace s větší nebo shodnou prioritou. Není-li priorita zadána, jsou spuštěny všechny úlohy kompilace.
queue{pause | | continuestatus} Pozastaví službu nativních bitových kopií, umožní pozastavené službě pokračovat nebo se dotáže na stav služby.

Argumenty

Argument Popis
assemblyName Plný zobrazovaný název sestavení. Například "myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5". Poznámka: Můžete zadat částečný název sestavení, například myAssembly, pro akce display a uninstall akce.

V jednom příkazovém řádku nástroje Ngen.exe lze zadat pouze jedno sestavení.
assemblyPath Explicitní cesta k sestavení. Lze zadat úplnou nebo relativní cestu.

Zadáte-li název souboru bez cesty, musí se sestavení nacházet v aktuálním adresáři.

V jednom příkazovém řádku nástroje Ngen.exe lze zadat pouze jedno sestavení.

Úrovně priority

Priorita Popis
1 Nativní bitové kopie jsou generovány a nainstalovány okamžitě, nečeká se na nečinnost počítače.
2 Nativní bitové kopie jsou generovány a instalovány bez čekání na nečinnost počítače, ale až po dokončení všech akcí s prioritou 1 (a jejich závislostí).
3 Nativní bitové kopie jsou nainstalovány ve chvíli, kdy služba nativních bitových kopií zjistí, že je počítač nečinný. Viz Služba nativní bitové kopie.

Scénáře

Scénář Popis
/Debug Vygeneruje nativní bitové kopie, které lze použít v ladicím programu.
/Profile Vygeneruje nativní bitové kopie, které lze použít v profileru.
/NoDependencies Vygeneruje minimální počet nativních bitových kopií požadovaný zadanými možnostmi scénáře.

Config

Konfigurace Popis
/ExeConfig: exePath Použije konfiguraci zadaného spustitelného sestavení.

Při vytváření vazeb na závislosti musí nástroj Ngen.exe učinit stejná rozhodnutí jako zavaděč. Když se sdílená komponenta načte za běhu pomocí Load metody, konfigurační soubor aplikace určuje závislosti načtené pro sdílenou komponentu – například verzi načtené závislosti. Přepínač /ExeConfig poskytuje Ngen.exe pokyny k načtení závislostí za běhu.
/AppBase: directoryPath Při hledání závislostí aplikace použije jako základ cesty zadaný adresář.

Možnosti

Možnost Popis
/nologo Potlačí zobrazení úvodního nápisu společnosti Microsoft.
/silent Potlačí zobrazování zpráv o úspěchu.
/verbose Zobrazí podrobné informace o ladění.
/help, /? Zobrazí syntaxi příkazu a možnosti aktuální verze.

Poznámky

Chcete-li spustit nástroj Ngen.exe, je zapotřebí mít oprávnění správce.

Upozornění

Nástroj Ngen.exe nespouštějte pro sestavení, která nemají plnou důvěryhodnost. Počínaje rozhraním .NET Framework 4 Ngen.exe kompiluje sestavení s úplným vztahem důvěryhodnosti a zásady zabezpečení přístupu kódu (CAS) se už nevyhodnocují.

Počínaje rozhraním .NET Framework 4 se nativní bitové kopie vygenerované s Ngen.exe už nedají načíst do aplikací, které běží v částečné důvěryhodnosti. Namísto toho je vyvolán kompilátor za běhu (JIT).

Ngen.exe generuje nativní bitové kopie pro sestavení určené argumentem assemblynameinstall akce a všechny jeho závislosti. Závislosti se stanoví z odkazů v manifestu sestavení. Jediný scénář, ve kterém potřebujete nainstalovat závislost samostatně, je, když aplikace načte pomocí reflexe, například voláním Assembly.Load metody.

Důležité

Nepoužívejte metodu Assembly.LoadFrom s nativními imagemi. Bitovou kopii zavedenou touto metodou nelze v kontextu spuštění používat jinými sestaveními.

Nástroj Ngen.exe udržuje počet odkazů na závislosti. Předpokládejme například, že MyAssembly.exeYourAssembly.exe obě jsou nainstalovány v mezipaměti nativní bitové kopie a oba mají odkazy na OurDependency.dll. Pokud MyAssembly.exe se odinstaluje, OurDependency.dll neodinstaluje se. Odebere se pouze při YourAssembly.exe odinstalaci.

Pokud generujete nativní bitovou kopii pro sestavení v globální mezipaměti sestavení (GAC), zadejte její zobrazovaný název. Viz třída Assembly.FullName.

Nativní bitové kopie, které generuje Ngen.exe, mohou být sdíleny napříč doménami aplikace. To znamená, že nástroj Ngen.exe lze použít ve scénářích aplikací, které vyžadují, aby byla sestavení sdílena napříč doménami aplikace. Určení neutrality domény:

Vždy je třeba použít doménově neutrální kód, pokud je dané sestavení načítáno do více domén aplikace. Pokud je nativní bitová kopie načtena do nesdílené domény aplikace poté, co byla načtena do sdílené domény, nelze ji použít.

Poznámka:

Doménově neutrální kód nemůže být uvolněn a výkon může být mírně snížen, zvláště při přistupování ke statickým členům.

V této části Poznámky:

Generování imagí pro různé scénáře

Po vygenerování nativní bitové kopie pro sestavení se modul runtime automaticky pokusí vyhledat a použít tuto nativní bitovou kopii při každém spuštění sestavení. V závislosti na scénáři lze generovat více bitových kopií.

Pokud například spustíte sestavení ve scénáři ladění nebo profilace, modul runtime vyhledá nativní bitovou kopii vygenerovanou pomocí /Debug možností nebo /Profile možností. Pokud nemůže najít odpovídající nativní bitovou kopii, vrátí se modul runtime ke standardní JIT kompilaci. Jediným způsobem, jak ladit nativní bitové kopie, je vytvořit nativní bitovou kopii s /Debug možností.

Akce uninstall také rozpozná scénáře, takže můžete odinstalovat všechny scénáře nebo jenom vybrané scénáře.

Určení, kdy použít nativní bitové kopie

Nativní bitové kopie mohou poskytnout zvýšení výkonu ve dvou oblastech: lepší využití paměti a rychlejší spouštění.

Poznámka:

Výkon nativních bitových kopií závisí na několika faktorech, které analýzu výkonu znesnadňují, například přístupové vzory kódu a dat, počet volání napříč hranicemi modulu či počet závislostí již načtených jinými aplikacemi. Jediným způsobem, jak určit, zda nativní bitové kopie prospívají aplikaci, je pečlivé měření výkonu v klíčových scénářích nasazení.

Vylepšené využití paměti

Nativní bitové kopie mohou významně zlepšit využití paměti, je-li kód sdílen mezi procesy. Nativní bitové kopie jsou soubory Windows PE, tudíž jedna kopie souboru .dll může být sdílena několika procesy. Naproti tomu nativní kód vytvořený kompilátorem JIT je uložen v soukromé paměti a nelze jej sdílet.

Aplikace spuštěné v rámci terminálových služeb také využívají výhod sdílených znakových stránek.

Kromě toho skutečnost, že není načítán kompilátor JIT, ušetří pevně dané množství paměti pro každou instanci aplikace.

Rychlejší spuštění aplikace

Předkompilování sestavení programem Ngen.exe může zvýšit rychlost spuštění některých aplikací. Obecně lze zvýšení výkonu dosáhnout tam, kde aplikace sdílejí sestavení komponent, protože po prvním spuštění aplikace jsou komponenty sdílené s jinými aplikacemi již načteny. Úplné spuštění, při němž musí být všechna sestavení aplikace načtena z pevného disku, nevyužívají výhod nativních bitových kopií v takové míře, protože má převahu přístupová doba pevného disku.

Pevné vazby mohou ovlivnit rychlost spuštění, protože všechny bitové kopie pevně svázané s hlavním sestavením aplikace musí být načteny najednou.

Poznámka:

Před rozhraním .NET Framework 3.5 Service Pack 1 byste měli do globální mezipaměti sestavení umístit sdílené, silné pojmenované komponenty, protože zavaděč provádí dodatečné ověření u sestavení se silným názvem, která nejsou v globální mezipaměti sestavení, a účinně eliminuje veškeré zlepšení doby spuštění získané pomocí nativních imagí. Optimalizace, které byly zavedeny v rozhraní .NET Framework 3.5 SP1, odebraly dodatečné ověření.

Shrnutí důležitých informací o využití

Následující obecné a aplikační informace vám mohou pomoci rozhodnout, zda může být vyhodnocení nativních bitových kopií pro aplikaci přínosem:

  • Nativní bitové kopie se načítají rychleji než CIL, protože eliminují potřebu mnoha spouštěcích aktivit, jako je kompilace JIT a ověření bezpečnosti typu.

  • Nativní bitové kopie vyžadují menší počáteční pracovní sadu, protože není zapotřebí použít kompilátor JIT.

  • Nativní bitové kopie umožňují sdílení kódu mezi procesy.

  • Nativní bitové kopie vyžadují více místa na pevném disku než sestavení CIL a mohou vyžadovat značné množství času k vygenerování.

  • Nativní bitové kopie musí být udržovány.

    • Je-li upraveno původní sestavení nebo jedna z jeho závislostí, je zapotřebí bitové kopie znovu vygenerovat.

    • Jediné sestavení může vyžadovat několik nativních bitových kopií pro použití v různých aplikacích a scénářích. Například informace o konfiguraci dvou aplikací může vyústit v různá rozhodnutí o vazbách stejného závislého sestavení.

    • Nativní bitové kopie musí být generovány správcem; tj. z účtu systému Windows ve skupině Administrators.

Spolu s těmito obecnými informacemi je zapotřebí při určování, zda mohou nativní bitové kopie poskytnout zvýšení výkonu, zvážit i povahu aplikace:

  • Je-li aplikace spouštěna v prostředí, které využívá mnoho sdílených komponent, nativní bitové kopie umožňují sdílení komponent mezi mnoha procesy.

  • Používá-li aplikace více domén aplikace, nativní bitové kopie umožňují sdílení znakových stránek mezi doménami.

    Poznámka:

    V rozhraních .NET Framework verze 1.0 a 1.1 nemohou být nativní bitové kopie sdíleny napříč doménami aplikace. Verze 2.0 a novější již toto omezení nemají.

  • Bude-li aplikace spuštěna v rámci Terminálového serveru, nativní bitové kopie umožní sdílení znakových stránek.

  • Rozsáhlé aplikace obecně těží z výhod kompilace do nativních bitových kopií. Malým aplikacím nativní bitové kopie obvykle výhody nepřinášejí.

  • Pro dlouho běžící aplikace vykazuje kompilace JIT za běhu mírně vyšší výkon než nativní bitové kopie. (Pevné vazby mohou tento rozdíl ve výkonu do určité míry zmenšit.)

Důležitost základních adres sestavení

Jelikož nativní bitové kopie jsou soubory Windows PE, týkají se jich stejné problémy související se změnou základní cesty jako u ostatních spustitelných souborů. Snížení výkonu vinou přemístění je ještě větší, jsou-li použity pevné vazby.

Chcete-li nastavit základní adresu pro nativní bitovou kopii, použijte příslušnou možnost kompilátoru pro nastavení základní adresy sestavení. Tuto základní adresu používá nástroj Ngen.exe pro nativní bitové kopie.

Poznámka:

Nativní bitové kopie jsou větší než spravovaná sestavení, z nichž byly vytvořeny. Základní adresy musí být vypočteny tak, aby tyto větší velikosti umožňovaly.

Chcete-li zobrazit preferovanou základní adresu nativní bitové kopie, můžete použít například nástroj dumpbin.exe.

Pevná vazba

Pevné vazby zvyšují propustnost a snižují velikost pracovní sady pro nativní bitové kopie. Nevýhodou pevné vazby je, že všechny bitové kopie, které jsou pevně vázány na sestavení, musí být načteny při načtení sestavení. To u velkých aplikací může výrazně prodloužit spouštění.

Pevná vazba je vhodná pro závislosti, které jsou načteny ve všech scénářích aplikace, u kterých velmi záleží na výkonu. Stejně jako u jakéhokoli jiného aspektu použití nativní bitové kopie je měření výkonu jediným způsobem, jak určit, zda pevná vazba zlepšuje výkon vaší aplikace.

DefaultDependencyAttribute Atributy DependencyAttribute umožňují poskytovat nápovědy pro pevné vazby pro Ngen.exe.

Poznámka:

Tyto atributy jsou informace pro Ngen.exe, nikoli příkazy. Jejich použití nezaručuje pevné vazby. V budoucích verzích se může změnit význam těchto atributů.

Určení nápovědy pro vazbu pro závislost

DependencyAttribute Použití na sestavení k označení pravděpodobnosti, že se načte zadaná závislost. LoadHint.Always indikuje, že je vhodná pevná vazba, značí, Default že se má použít výchozí hodnota závislosti, a Sometimes indikuje, že pevné vazby nejsou vhodné.

Následující kód zobrazuje atributy pro sestavení, které má dvě závislosti. První závislost (Assembly1) je vhodným kandidátem pro pevnou vazbu, druhá závislost (Assembly2) nikoliv.

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)];

Název sestavení neobsahuje příponu názvu souboru. Lze použít zobrazené názvy.

Zadání výchozí nápovědy pro vazbu pro sestavení

Výchozí pokyny pro vazby jsou zapotřebí pouze pro sestavení, která budou použita okamžitě a často aplikací, která na nich závisí. Použijte u DefaultDependencyAttribute těchto sestavení hodnotu with LoadHint.Always a určete, že má být použita pevná vazba.

Poznámka:

Neexistuje důvod použít DefaultDependencyAttribute pro .dll sestavení, která nespadají do této kategorie, protože použití atributu s jinou hodnotou, než LoadHint.Always má stejný účinek jako použití atributu vůbec.

Společnost Microsoft používá DefaultDependencyAttribute k určení, že pevná vazba je výchozí pro velmi malý počet sestavení v rozhraní .NET Framework, například mscorlib.dll.

Odložené zpracování

Generování nativních bitových kopií pro velmi velké aplikace může být časově náročné. Obdobně změny sdílené komponenty nebo změny nastavení počítače mohou vyžadovat aktualizaci mnoha nativních bitových kopií. Akce install mají update/queue možnost, která zařadí operaci do fronty pro odložené spuštění službou nativní bitové kopie. Kromě toho Ngen.exe má queue a executeQueuedItems akce, které poskytují určitou kontrolu nad službou. Další informace naleznete v tématu Služba nativní bitové kopie.

Nativní bitové kopie a kompilace JIT

Pokud Ngen.exe v sestavení zaznamená jakékoli metody, které neumí generovat, vyloučí je z nativní bitové kopie. Jakmile modul runtime spustí toto sestavení, vrátí se k JIT kompilaci pro ty metody, které nejsou zahrnuty v nativní bitové kopii.

Kromě toho nejsou nativní bitové kopie použity v případě, že bylo sestavení inovováno, nebo pokud byla bitová kopie z jakéhokoliv důvodu zneplatněna.

Neplatné obrázky

Při použití nástroje Ngen.exe pro vytvoření nativní bitové kopie sestavení závisí výstup na zadaných možnostech příkazového řádku a určitých nastaveních počítače. Mezi tato nastavení patří následující:

  • Verze rozhraní .NET Framework.

  • Přesná identita sestavení (rekompilace identitu mění).

  • Přesná identita všech sestavení, na které sestavení odkazuje (rekompilace identitu mění).

  • Bezpečnostní faktory.

Nástroj Ngen.exe zaznamenává tyto informace při generování nativní bitové kopie. Po spuštění sestavení modul runtime hledá nativní bitovou kopii vytvořenou s možnostmi a nastavením, které odpovídají aktuálnímu prostředí počítače. Modul runtime se vrátí k JIT kompilaci sestavení, pokud nemůže najít odpovídající nativní bitovou kopii. Následující změny nastavení a prostředí počítače způsobí zneplatnění nativních bitových kopií:

  • Verze rozhraní .NET Framework.

    Pokud použijete aktualizaci rozhraní .NET Framework, všechny nativní bitové kopie, které jste vytvořili pomocí Ngen.exe se stanou neplatnými. Z tohoto důvodu všechny aktualizace rozhraní .NET Framework spustí Ngen Update příkaz, aby se zajistilo, že se všechny nativní bitové kopie znovu vygenerují. Rozhraní .NET Framework automaticky vytvoří nové nativní bitové kopie pro knihovny rozhraní .NET Framework, které nainstaluje.

  • Přesná identita sestavení.

    Pokud je provedena rekompilace sestavení, odpovídající nativní bitové kopie se stanou neplatnými.

  • Přesná identita všech sestavení, na která sestavení odkazuje.

    Pokud aktualizujete spravované sestavení, všechny nativní bitové kopie, které přímo nebo nepřímo závisí na tomto sestavení, se zneplatní a musí být znovu vygenerovány. To zahrnuje jak běžné odkazy, tak pevně vázané závislosti. Při každém použití aktualizace softwaru by instalační program měl spustit Ngen Update příkaz, aby se zajistilo, že se všechny závislé nativní bitové kopie znovu vygenerují.

  • Bezpečnostní faktory.

    Změna zásad zabezpečení počítače směřující k omezení dříve udělených oprávnění sestavení může způsobit, že se dříve zkompilované nativní bitové kopie sestavení stanou neplatnými.

    Podrobné informace o tom, jak modul CLR (Common Language Runtime) spravuje zabezpečení přístupu kódu a jak používat oprávnění, najdete v tématu Zabezpečení přístupu kódu.

Řešení problému

Následující témata řešení potíží umožňují zjistit, které nativní bitové kopie se používají a které nelze použít vaší aplikací, určit, kdy kompilátor JIT začne kompilovat metodu, a ukazuje, jak se odhlásit z kompilace nativních bitových kopií zadaných metod.

vazba sestavení – prohlížeč protokolu

Pokud chcete ověřit, že aplikace používá nativní bitové kopie, můžete použít Fuslogvw.exe (Prohlížeč protokolů vazby sestavení). V okně Prohlížeče protokolů vyberte nativní bitové kopie v poli Kategorie protokolu. Fuslogvw.exe poskytuje informace o důvodu, proč byla nativní bitová kopie odmítnuta.

Pomocník pro spravované ladění JITCompilationStart

Pomocí pomocníka pro ladění jitCompilationStart (MDA) můžete určit, kdy kompilátor JIT začne kompilovat funkci.

Odhlášení z generování nativních imagí

V některýchpřípadech NGen.exe chm technologii může v některých případech být obtížné vygenerovat nativní bitovou kopii pro konkrétní metodu nebo můžete preferovat kompilaci metody JIT a pak ji zkompilovat V tomto případě můžete pomocí atributu System.Runtime.BypassNGenAttribute zabránit NGen.exe vygenerovat nativní image pro konkrétní metodu. Atribut musí být použit jednotlivě pro každou metodu, jejíž kód nechcete zahrnout do nativní bitové kopie. NGen.exe rozpozná atribut a negeneruje kód v nativní imagi pro odpovídající metodu.

Všimněte si však, že není BypassNGenAttribute definován jako typ v knihovně tříd rozhraní .NET Framework. Abyste mohli atribut v kódu využívat, musíte ho nejprve definovat následujícím způsobem:

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

Atribut pak můžete použít pro jednotlivé metody. Následující příklad dává generátoru nativních imagí pokyn, že by neměl generovat nativní bitovou kopii pro metodu ExampleClass.ToJITCompile .

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

Příklady

Následující příkaz vygeneruje nativní bitovou kopii pro ClientApp.exe, umístěnou v aktuálním adresáři, a nainstaluje image do mezipaměti nativní bitové kopie. Pokud pro sestavení existuje soubor nastavení, Ngen.exe jej použije. Kromě toho se nativní bitové kopie generují pro všechny soubory .dll, které ClientApp.exe odkazují.

ngen install ClientApp.exe

Bitová kopie nainstalovaná pomocí Ngen.exe se také nazývá kořen. Kořen může být aplikace nebo sdílená komponenta.

Následující příkaz vygeneruje nativní bitovou kopii pro MyAssembly.exe zadanou cestu.

ngen install c:\myfiles\MyAssembly.exe

Při hledání sestavení a jejich závislosti používá Ngen.exe stejnou logiku při zjišťování, jaká je použita u Common Language Runtime (CLR). Ve výchozím nastavení se adresář, který obsahuje ClientApp.exe , používá jako základní adresář aplikace a veškeré testování sestavení začíná v tomto adresáři. Toto chování můžete přepsat pomocí /AppBase možnosti.

Poznámka:

Jde o změnu oproti chování nástroje Ngen.exe v rozhraních .NET Framework verze 1.0 a 1.1, kde základ cesty aplikace je nastaven na aktuální adresář.

Sestavení může mít závislost bez odkazu, například pokud pomocí metody načte soubor Assembly.Load .dll. Nativní bitovou kopii pro takový soubor .dll můžete vytvořit pomocí konfiguračních informací pro sestavení aplikace s /ExeConfig možností. Následující příkaz vygeneruje nativní bitovou kopii pro MyLib.dll, použití konfiguračních informací z MyApp.exe.

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

Při odebrání aplikace nebudou odebrána sestavení nainstalovaná tímto způsobem.

Chcete-li odinstalovat závislost, použijte stejné možnosti příkazového řádku, které byly použity k její instalaci. Následující příkaz odinstaluje z předchozího příkladu MyLib.dll .

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

Chcete-li vytvořit nativní bitovou kopii pro sestavení v globální mezipaměti sestavení (GAC), použijte zobrazovaný název sestavení. Příklad:

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

NGen.exe vytváří samostatnou sadu bitových kopií pro každý scénář, který instalujete. Například následující příkazy nainstalují kompletní sadu nativních bitových kopií pro normální provoz, jinou kompletní sadu pro ladění a třetí pro profilování:

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

Zobrazení mezipaměti nativních bitových kopií

Jakmile jsou nativní bitové kopie nainstalovány v mezipaměti, lze je zobrazit pomocí nástroje Ngen.exe. Následující příkaz zobrazí všechny nativní bitové kopie v mezipaměti nativních bitových kopií.

ngen display

Akce display nejprve zobrazí seznam všech kořenových sestavení následovaných seznamem všech nativních imagí v počítači.

Chcete-li zobrazit pouze informace o sestavení, použijte jeho jednoduchý název. Následující příkaz zobrazí všechny nativní bitové kopie v mezipaměti nativních bitových kopií, které odpovídají částečnému názvu MyAssembly, jejich závislostem a všem kořenům, na MyAssemblykterých je závislost:

ngen display MyAssembly

Znalost, které kořeny závisí na sestavení sdílené komponenty, je užitečné při gaugování dopadu update akce po upgradu sdílené komponenty.

Zadáte-li příponu souboru sestavení, musí být buď zadána cesta, nebo spuštěn nástroj Ngen.exe z adresáře obsahujícího sestavení:

ngen display c:\myApps\MyAssembly.exe

Následující příkaz zobrazí všechny nativní bitové kopie v mezipaměti nativních bitových kopií s názvem MyAssembly a verzí 1.0.0.0.

ngen display "myAssembly, version=1.0.0.0"

Aktualizace bitových kopií

Bitové kopie jsou obvykle aktualizovány po upgradu sdílené komponenty. Chcete-li aktualizovat všechny nativní bitové kopie, které se změnily nebo jejichž závislosti se změnily, použijte update akci bez argumentů.

ngen update

Aktualizace všech bitových kopií může být časově náročný proces. Pomocí této možnosti můžete zařadit aktualizace pro spuštění službou nativní bitové kopie do fronty /queue . Další informace o možnostech /queue a prioritách instalace najdete v tématu Služba nativní bitové kopie.

ngen update /queue

Odinstalování bitových kopií

Nástroj Ngen.exe udržuje seznam závislostí, takže sdílené komponenty jsou odstraněny pouze v případě, že byla odebrána všechna sestavení, která na nich závisí. Kromě toho, pokud byla sdílená komponenta nainstalována jako kořen, nebude odstraněna.

Následující příkaz odinstaluje všechny scénáře kořenového adresáře ClientApp.exe:

ngen uninstall ClientApp

Akce uninstall se dá použít k odebrání konkrétních scénářů. Následující příkaz odinstaluje všechny scénáře ladění pro ClientApp.exe:

ngen uninstall ClientApp /debug

Poznámka:

Odinstalace /debug scénářů neodinstaluje scénář, který zahrnuje obojí /profile i /debug.

Následující příkaz odinstaluje všechny scénáře pro konkrétní verzi ClientApp.exe:

ngen uninstall "ClientApp, Version=1.0.0.0"

Následující příkazy odinstalují všechny scénáře pro "ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL", toto sestavení nebo pouze scénář ladění:

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

Stejně jako u install akce vyžaduje dodání rozšíření buď spuštění Ngen.exe z adresáře obsahujícího sestavení, nebo zadání úplné cesty.

Příklady týkající se služby nativní bitové kopie najdete v tématu Služba nativní bitové kopie.

Úloha pro nativní bitové kopie

Úloha nativní bitové kopie je úloha systému Windows, která generuje a udržuje nativní bitové kopie. Úloha nativní bitové kopie vygeneruje a uvolní nativní bitové kopie automaticky pro podporované scénáře. Umožňuje také instalačním programům používat Ngen.exe (Native Image Generator) k vytváření a aktualizaci nativních imagí v odložené době.

Úloha nativní bitové kopie se jednou zaregistruje pro každou architekturu procesoru podporovanou v počítači, aby byla povolena kompilace pro aplikace, které cílí na každou architekturu:

Název úkolu 32bitový počítač 64bitový počítač
NET Framework NGEN v4.0.30319 Ano Yes
NET Framework NGEN v4.0.30319 64 No Ano

Úloha nativní bitové kopie je k dispozici v rozhraní .NET Framework 4.5 a novějších verzích při spuštění ve Windows 8 nebo novějších verzích. V dřívějších verzích Systému Windows používá rozhraní .NET Framework službu nativní bitové kopie.

Doba života úkolu

Obecně platí, že plánovač úloh systému Windows spustí úlohu nativní bitové kopie každou noc, když je počítač nečinný. Úloha kontroluje veškerou odloženou práci, která je zařazena do fronty instalačními programy aplikací, všechny odložené požadavky na aktualizaci nativních imagí a automatické vytváření imagí. Úkol dokončí nevyrovnané pracovní položky a pak se vypne. Pokud počítač přestane být nečinný, když je úloha spuštěná, úloha se zastaví.

Úlohu nativní bitové kopie můžete spustit také ručně prostřednictvím uživatelského rozhraní Plánovače úloh nebo ručním voláním NGen.exe. Pokud je úloha spuštěna některou z těchto metod, bude pokračovat ve spuštění, když počítač již není nečinný. Image vytvořené ručně pomocí NGen.exe mají prioritu, aby bylo možné předvídatelné chování instalačních programů aplikací.

Nativní bitová kopie služby

Služba nativní bitové kopie je služba systému Windows, která generuje a udržuje nativní bitové kopie. Služba nativní bitové kopie umožňuje vývojáři odložit instalaci a aktualizaci nativních bitových kopií na období, kdy je počítač nečinný.

Za normálních okolností je služba nativní bitové kopie inicializována instalačním programem (instalačním programem) pro aplikaci nebo aktualizaci. V případě akcí s prioritou 3 se služba provede v době nečinnosti v počítači. Služba uloží svůj stav a v případě potřeby může pokračovat několika restartováními. Do fronty je možné přidat více kompilací obrázků.

Služba také komunikuje s ručním příkazem Ngen.exe. Ruční příkazy mají přednost před aktivitou na pozadí.

Poznámka:

V systému Windows Vista je název služby nativní bitové kopie "Microsoft.NET Framework NGEN v2.0.50727_X86" nebo "Microsoft.NET Framework NGEN v2.0.50727_X64". Ve všech starších verzích systému Microsoft Windows je název "Služba optimalizace modulu runtime .NET v2.0.50727_X86" nebo "Služba optimalizace modulu runtime .NET v2.0.50727_X64".

Spouštění odložených operací

Před zahájením instalace nebo upgradu se doporučuje pozastavení služby. Tím se zajistí, že se služba nespustí, když instalační program kopíruje soubory nebo vkládá sestavení do globální mezipaměti sestavení. Následující Ngen.exe příkazový řádek pozastaví službu:

ngen queue pause

Pokud jsou všechny odložené operace zařazené do fronty, umožní následující příkaz službě pokračovat:

ngen queue continue

Pokud chcete odložit generování nativních imagí při instalaci nové aplikace nebo při aktualizaci sdílené komponenty, použijte /queue možnost s akcemi install nebo update akcemi. Následující příkazové řádky Ngen.exe nainstalují nativní bitovou kopii pro sdílenou komponentu a aktualizují všechny kořeny, které mohly být ovlivněny:

ngen install MyComponent /queue
ngen update /queue

Akce update znovu vygeneruje všechny nativní bitové kopie, které byly zneplatněné, nejen ty, které používají MyComponent.

Pokud se vaše aplikace skládá z mnoha kořenů, můžete řídit prioritu odložených akcí. Následující příkazy zařadí instalaci tří kořenových certifikátů do fronty. Assembly1 je nainstalován jako první, aniž byste čekali na dobu nečinnosti. Assembly2 je také nainstalován bez čekání na dobu nečinnosti, ale po dokončení všech akcí priority 1. Assembly3 je nainstalována, když služba zjistí, že počítač je nečinný.

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

Akce zařazené do fronty můžete vynutit synchronně pomocí executeQueuedItems akce. Pokud zadáte volitelnou prioritu, tato akce ovlivní pouze akce zařazené do fronty, které mají stejnou nebo nižší prioritu. Výchozí priorita je 3, takže následující příkaz Ngen.exe zpracuje všechny akce ve frontě okamžitě a nevrací se, dokud nebudou dokončeny:

ngen executeQueuedItems

Synchronní příkazy jsou spouštěné Ngen.exe a nepoužívají službu nativní bitové kopie. Akce můžete spouštět pomocí Ngen.exe, když je spuštěná služba nativní bitové kopie.

Vypnutí služby

Po spuštění příkazu Ngen.exe, který obsahuje /queue možnost, služba poběží na pozadí, dokud se nedokončí všechny akce. Služba uloží svůj stav, aby v případě potřeby mohl pokračovat několika restartováními. Když služba zjistí, že nejsou ve frontě žádné další akce, resetuje svůj stav, aby se při příštím spuštění počítače nerestartoval a pak se sám vypne.

Interakce služby s klienty

V rozhraní .NET Framework verze 2.0 je jediná interakce se službou nativní bitové kopie prostřednictvím nástroje příkazového řádku Ngen.exe. Pomocí nástroje příkazového řádku ve skriptech instalace zařadíte akce do fronty pro službu nativní bitové kopie a interagujte se službou.

Viz také