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. Ekvivalentem nativního generátoru 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ěné.

  • 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.

Na Windows 8 si přečtěte téma Úloha nativní bitové kopie.

Další informace o používání Ngen.exe a 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 v tématu Starší syntaxe generátoru nativních bitových kopií (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.

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

Syntax

ngen action [options]
ngen /? | /help

Akce

Následující tabulka ukazuje syntaxi jednotlivých actionpoložek . Popisy jednotlivých částí objektu actionnajdete v tabulkách Argumenty, Úrovně priority, Scénáře a Konfigurace . Tabulka Možnosti popisuje options přepínače nápovědy a .

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

Pokud /queue je tato akce zadána, bude tato akce zařazena do fronty pro službu nativní bitové kopie. Výchozí hodnota priority je 3. Viz tabulka Prioritní úrovně .
uninstall [assemblyName | assemblyPath] [scenarios] [config] 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 se akce uninstall * už nepodporuje.
update [/queue] Aktualizuje nativní bitové kopie, které se staly neplatnými.

Pokud /queue je zadána, budou aktualizace zařazeny do fronty pro nativní službu 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 | continue | status} 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 Description
assemblyName Plný zobrazovaný název sestavení. Například, "myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5". Poznámka: Pro akce a uninstall můžete zadat částečný název sestavení, například myAssembly.display

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 Description
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 Nativní služba bitových kopií.

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ěč. Pokud je sdílená komponenta načtena za běhu pomocí Load metody, konfigurační soubor aplikace určuje závislosti, které jsou načteny pro sdílenou komponentu – například verzi závislosti, která je načtena. Přepínač /ExeConfig poskytuje Ngen.exe pokyny k tomu, které závislosti by se načetly 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 plnou důvěryhodností a zásady zabezpečení přístupu kódu (CAS) se už nevyhodnocují.

Počínaje rozhraním .NET Framework 4 již nelze nativní bitové kopie generované pomocí Ngen.exe načíst do aplikací, které jsou spuštěny v částečném vztahu 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 pro akci a všechny její 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ž ji 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 nainstalované v mezipaměti nativních imagí a obě obsahují 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í tuto nativní bitovou kopii vyhledat a použít 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í image, která byla vygenerována s možnostmi /Debug nebo /Profile . 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í image, je vytvořit nativní image 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í image

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í (GM) umístit sdílené komponenty se silnými názvy, protože zavaděč provádí dodatečné ověření u sestavení se silnými názvy, která nejsou v globální mezipaměti sestavení (GPA). Tím se efektivně eliminuje jakékoli zlepšení doby spuštění, které bylo dosaženo použitím 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ž jazyk MSIL, protože odstraňují potřebu mnoha aktivit při spouštění, například kompilaci JIT a ověření bezpečnosti typů.

  • 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 disku než sestavení MSIL a jejich generování může trvat značně dlouho.

  • 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 adres základu 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.

Atributy DependencyAttribute a DefaultDependencyAttribute umožňují poskytovat Ngen.exe pevné vazby.

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 vazby pro závislost

DependencyAttribute Použít na sestavení k označení pravděpodobnosti, že bude načtena zadaná závislost. LoadHint.Always označuje, že je pevná vazba vhodná, indikuje, Default že by měla být použita výchozí hodnota pro závislost, a Sometimes indikuje, že pevná vazba není 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 vazby 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í. Pomocí příkazu DefaultDependencyAttribute s LoadHint.Always na taková sestavení určete, že se má použít pevná vazba.

Poznámka

Není žádný 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 nepoužení atributu vůbec.

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 a update mají /queue možnost, která zatáčí operaci do fronty pro odložené spuštění službou nativních bitových kopií. Kromě toho Ngen.exe obsahuje queue akce a executeQueuedItems , které poskytují určitou kontrolu nad službou. Další informace najdete v tématu Služba nativních bitových kopií.

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 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 vytváří nové nativní bitové kopie pro knihovny rozhraní .NET Framework, které instaluje.

  • 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, který zajistí, že se znovu vygenerují všechny závislé nativní bitové kopie.

  • 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 ke kódu a jak používat oprávnění, najdete v tématu Zabezpečení přístupu ke kódu.

Řešení potíží

Následující témata řešení potíží vám umožní zjistit, které nativní bitové kopie se používají a které aplikace nemůže použít, určit, kdy kompilátor JIT začne kompilovat metodu, a ukazuje, jak zakázat kompilaci nativních bitových kopií určených metod.

vazba sestavení – prohlížeč protokolu

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

Pomocník spravovaného ladění JITCompilationStart

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

Výslovný nesouhlas s generováním nativních bitových kopií

V některých případech mohou mít NGen.exe potíže s generováním nativní bitové kopie pro určitou metodu nebo můžete preferovat kompilování metody JIT a pak kompilaci do nativní bitové kopie. V takovém případě můžete atribut použít System.Runtime.BypassNGenAttribute k tomu, abyste NGen.exe zabránili generování nativní bitové kopie pro konkrétní metodu. Atribut musí být použit zvlášť pro každou metodu, jejíž kód nechcete zahrnout do nativní bitové kopie. NGen.exe rozpozná atribut a negeneruje kód v nativní bitové kopii pro odpovídající metodu.

Všimněte si však, že BypassNGenAttribute není definován jako typ v knihovně tříd rozhraní .NET Framework. Abyste mohli využívat atribut v kódu, 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 každou metodu. Následující příklad dává pokyn generátoru nativních bitových kopií, ž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, která se nachází v aktuálním adresáři, a nainstaluje image do mezipaměti nativních bitových kopií. Pokud pro sestavení existuje soubor nastavení, Ngen.exe jej použije. Kromě toho se pro všechny .dll soubory, na které ClientApp.exe odkazují, generují nativní bitové kopie.

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 se MyAssembly.exe zadanou cestou.

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 vypíše všechna kořenová sestavení a potom seznam všech nativních bitových kopií 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ávislosti a všechny kořeny, které mají závislost na MyAssembly:

ngen display MyAssembly

Znalost, které kořeny závisí na sestavení sdílené komponenty, je užitečné při měření 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. Pokud chcete 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. Aktualizace můžete zařadit do fronty pro spuštění službou nativní bitové kopie pomocí /queue možnosti . Další informace o možnostech /queue a prioritách instalace najdete v tématu Služba nativních bitových kopií.

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

Při odinstalaci /debug scénářů se neodinstaluje scénář, který zahrnuje obojí a /profile/debug.

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

ngen uninstall "ClientApp, Version=1.0.0.0"

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

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 poskytnutí 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ích bitových kopií najdete v tématu Nativní služba bitových kopií.

Ú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 automaticky vygeneruje a uvolní nativní image 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 bitových kopií v odložené době.

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

Název úlohy 32bitový počítač 64bitový počítač
NET Framework NGEN verze 4.0.30319 Yes Yes
NET Framework NGEN v4.0.30319 64 Ne Yes

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

Životnost úkolu

Obecně platí, že Plánovač úloh systému Windows spouští úlohu nativní bitové kopie každou noc, když je počítač nečinný. Úloha zkontroluje všechny odložené práce, které jsou zařazeny do fronty instalačními programy aplikací, všechny odložené požadavky na aktualizaci nativních bitových kopií a automatické vytváření bitových kopií. Úkol dokončí nevyřízených pracovních položek 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 nadále spuštěna, i když počítač již není nečinný. Image vytvořené ručně pomocí NGen.exe mají prioritu, aby se umožnilo předvídatelné chování instalačních programů aplikací.

Nativní bitová kopie služby

Nativní služba 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 iniciována instalačním programem (instalačním programem) pro aplikaci nebo aktualizaci. U akcí s prioritou 3 se služba spustí v době nečinnosti na 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é zařadit více kompilací obrázků.

Služba také pracuje 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 se pro službu nativní bitové kopie zobrazí název "Microsoft.NET Framework NGEN v2.0.50727_X86" nebo "Microsoft.NET Framework NGEN v2.0.50727_X64". Ve všech starších verzích Microsoft Windows je název ".NET Runtime Optimization Service v2.0.50727_X86" nebo ".NET Runtime Optimization Service v2.0.50727_X64".

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

Před zahájením instalace nebo upgradu se doporučuje službu pozastavovat. 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řazeny do fronty, následující příkaz umožní službě pokračovat:

ngen queue continue

Pokud chcete odložit generování nativní bitové kopie při instalaci nové aplikace nebo při aktualizaci sdílené komponenty, použijte /queue možnost s akcemi install nebo update . Následující Ngen.exe příkazové řádky 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 zasadí instalaci tří kořenových certifikátů do fronty. Assembly1 se nainstaluje jako první bez čekání na dobu nečinnosti. Assembly2 se instaluje také bez čekání na dobu nečinnosti, ale po dokončení všech akcí priority 1. Assembly3 je nainstalován, 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

Pomocí akce můžete vynutit synchronní provádění akcí ve frontě executeQueuedItems . Pokud zadáte volitelnou prioritu, ovlivní tato akce pouze akce ve frontě, 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 nevrátí je, dokud se nedokončí:

ngen executeQueuedItems

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

Vypnutí služby

Po spuštění příkazu Ngen.exe, který tuto možnost obsahuje /queue , běží služba na pozadí, dokud se nedokončily všechny akce. Služba uloží svůj stav, aby v případě potřeby pokračovala několika restartováními. Když služba zjistí, že nejsou ve frontě žádné další akce, resetuje svůj stav tak, aby se při příštím spuštění počítače nerestartovala, a pak se sama 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 v instalačních skriptech můžete zařadit akce do fronty pro službu nativní bitové kopie a pracovat se službou.

Viz také