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 zkompiluje nativní bitové kopie pro sestavení, která jsou .NET Framework bitové kopie. Ekvivalentní generátor nativních i image pro .NET Core je CrossGen.

Změny Ngen.exe v .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 update znovu vytvoří image, které byly zneplatněny.

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

Další Windows 8 tématu Úloha nativní bitové kopie.

Další informace o používání služby Ngen.exe a nativní bitové kopie najdete v tématu Native Image Service.

Poznámka

Ngen.exe syntaxi pro verze 1.0 a 1.1 .NET Framework najdete v části Generátor nativních imát (Ngen.exe)Starší verze syntaxe .

Tento nástroj je automaticky nainstalován se sadou Visual Studio. Ke spuštění tohoto 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 uvádí syntaxi každého action objektu . Popisy jednotlivých částí najdete v tabulkách action Arguments (Argumenty), Priority Levels(Úrovně priority), Scenarios(Scénáře) a Config (Konfigurace). Tabulka Možnosti popisuje přepínače options 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 zadaný parametr , akce se zařadit do fronty pro nativní službu bitových kopií. Výchozí hodnota priority je 3. Viz tabulka Priority Levels (Úrovně priority).
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: Od verze .NET Framework 4 se akce uninstall * už nepodporuje.
update [/queue] Aktualizuje nativní bitové kopie, které se staly neplatnými.

Pokud /queue je zadaný parametr , aktualizace se zařadit do fronty pro nativní službu bitových kopií. 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 Popis
assemblyName Plný zobrazovaný název sestavení. Například, "myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5". Poznámka: Pro akce a můžete zadat částečný název myAssembly sestavení, například display uninstall .

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 Native Image Service.

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ž je sdílená komponenta načtena za běhu pomocí metody , konfigurační soubor aplikace určuje závislosti, které jsou načteny pro sdílenou komponentu – například verzi závislosti, která Load je načtena. Přepínač /ExeConfig poskytuje Ngen.exe, které závislosti se načtou 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 .NET Framework 4 Ngen.exe sestavení s úplným vztahem důvěryhodnosti a zásady zabezpečení přístupu kódu (CAS) se už nevyhodnocují.

Počínaje .NET Framework 4 již nativní bitové kopie vygenerované pomocí Ngen.exe nelze načíst do aplikací spuštěných 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 akce assemblyname a všechny jeho install 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 v mezipaměti nativní bitové kopie jsou nainstalovány obě verze a obě mají MyAssembly.exe YourAssembly.exe odkazy na OurDependency.dll . Pokud MyAssembly.exe je odinstalován, OurDependency.dll není odinstalován. Odebere se jenom v YourAssembly.exe případě, že je odinstalovaná.

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í bitovou kopii, která byla vygenerována s /Debug /Profile možnostmi nebo . 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 možností /Debug .

Akce uninstall také rozpoznává 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ší spouštění aplikací

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 aktualizací .NET Framework 3.5 Service Pack 1 byste měli do globální mezipaměti sestavení (GAC) umístit sdílené komponenty se silným názvem, protože zavaděč provádí dodatečné ověření u sestavení se silným názvem, která nejsou v globální mezipaměti sestavení (GAC), čímž se efektivně eliminuje případné zlepšení doby spuštění získané použitím nativních bitových kopií. Optimalizace, které byly zavedeny v .NET Framework 3.5 SP1, odebraly dodatečné ověření.

Shrnutí 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 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é vazby

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 a umožňují poskytovat nápovědy pevné vazby pro DependencyAttribute DefaultDependencyAttribute 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 vazby pro závislost

Použijte na DependencyAttribute sestavení k označení pravděpodobnosti, že se načte zadaná závislost. LoadHint.Always označuje, že je vhodná pevné vazby, označuje, že se má použít výchozí nastavení pro závislost, a označuje, že pevné vazby Default Sometimes 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.

Určení výchozího parametru 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í. Použijte DefaultDependencyAttribute s u LoadHint.Always těchto sestavení k určení, že se má použít pevná vazba.

Poznámka

Neexistuje žádný důvod, jak 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 atribut, který vůbec nepoužívá.

společnost Microsoft používá DefaultDependencyAttribute k určení této pevné vazby výchozí hodnotu pro velmi malý počet sestavení v .NET Framework, jako je 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í. installAkce a update mají /queue možnost, která zařadí do fronty operaci pro odložené spouštění pomocí nativní bitové kopie služby. Kromě toho Ngen.exe má queue a executeQueuedItems akce, které poskytují určitou kontrolu nad službou. Další informace najdete v tématu nativní Image Service.

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 .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 .NET Framework.

    pokud použijete aktualizaci na .NET Framework, všechny nativní bitové kopie, které jste vytvořili pomocí Ngen.exe stanou neplatné. z tohoto důvodu všechny aktualizace .NET Framework spustí Ngen Update příkaz, aby se zajistilo opětovné vygenerování všech nativních imagí. .NET Framework automaticky vytvoří nové nativní bitové kopie pro knihovny .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. Pokaždé, když se použije aktualizace softwaru, instalační program by měl spustit příkaz, aby Ngen Update se zajistilo, ž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 kódu a používání oprávnění, najdete v tématu zabezpečení přístupu kódu.

Řešení potíží

Následující témata Poradce při potížích umožňují zjistit, které nativní bitové kopie jsou používány a které nemohou být použity vaší aplikací, k určení, kdy kompilátor JIT začne kompilovat metodu a ukazuje, jak odhlásit z kompilace nativních imagí zadaných metod.

vazba sestavení – prohlížeč protokolu

Chcete-li potvrdit, že aplikace používá nativní bitové kopie, můžete použít Fuslogvw.exe (Prohlížeč protokolů vazeb sestavení). V okně prohlížeče protokolu vazby v poli Kategorie protokolů vyberte nativní bitové kopie . Fuslogvw.exe poskytuje informace o důvodu, proč byla nativní bitová kopie odmítnuta.

Pomocníka spravovaného ladění jitCompilationStart –

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

Vypnutí generování nativních imagí

V některých případech může NGen.exe mít potíže při generování nativní bitové kopie pro určitou metodu, nebo může být vhodnější, aby byla metoda JIT zkompilována, spíše zkompilována do nativní bitové kopie. V tomto případě můžete použít System.Runtime.BypassNGenAttribute atribut, chcete-li zabránit NGen.exe generování nativní bitové kopie pro určitou metodu. Atribut musí být použit samostatně pro každou metodu, jejíž kód nechcete zahrnout do nativní bitové kopie. NGen.exe rozpoznává 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 .NET Framework. Aby bylo možné používat atribut v kódu, je nutné nejprve definovat následující:

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

Pak můžete použít atribut na základě jednotlivých metod. Následující příklad instruuje generátor nativních bitových kopií, který by neměl generovat nativní bitovou kopii pro ExampleClass.ToJITCompile metodu.

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 vytvoří nativní bitovou kopii pro objekt ClientApp.exe umístěný v aktuálním adresáři a nainstaluje bitovou kopii do mezipaměti nativní bitové kopie. Pokud pro sestavení existuje soubor nastavení, Ngen.exe jej použije. Kromě toho jsou vygenerovány nativní bitové kopie pro všechny .dll soubory, ClientApp.exe na které odkazuje.

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 vytvoří 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é zjišťová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 načte soubor .dll pomocí Assembly.Load metody. Můžete vytvořit nativní bitovou kopii pro takový soubor .dll pomocí informací o konfiguraci pro sestavení aplikace s /ExeConfig možností. Následující příkaz vytvoří nativní bitovou kopii pro MyLib.dll, použití informací o konfiguraci 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 MyLib.dll z předchozího příkladu.

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í. Napří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

displayAkce 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 imagí, které odpovídají částečnému názvu MyAssembly , jejich závislostem a všem kořenům, na kterých závisí MyAssembly :

ngen display MyAssembly

Znalost toho, které kořeny závisí na sestavení sdílené komponenty, je užitečné v měření dopad 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 imagí 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. Aktualizace můžete zařadit do fronty pro spouštění pomocí služby nativních imagí pomocí /queue Možnosti. Další informace o /queue Možnosti a prioritách instalace najdete v tématu nativní Image Service.

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 pro kořen ClientApp.exe :

ngen uninstall ClientApp

uninstallAkci lze 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 nástroj :

ngen uninstall ClientApp /debug

Poznámka

Scénáře /debug odinstalace neodinstalují scénář, který zahrnuje i . /profile``/debug.

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

ngen uninstall "ClientApp, Version=1.0.0.0"

Následující příkazy odinstalujte všechny scénáře "ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL", pro nebo pouze scénář ladě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 akce vyžaduje dodání rozšíření buď spuštění Ngen.exe z adresáře obsahujícího sestavení, nebo zadání install úplné cesty.

Příklady související s nativní službou bitových kopií najdete v tématu Native Image Service.

Úloha pro nativní bitové kopie

Úloha nativní bitové kopie je Windows, která generuje a udržuje nativní bitové kopie. Úloha nativní bitové kopie automaticky generuje a uvolňuje nativní bitové kopie pro podporované scénáře. Umožňuje také instalačním programům používatNgen.exe (Generátor nativních imagí) k vytváření a aktualizaci nativních imagí v odložené době.

Úloha nativní bitové kopie je jednou zaregistrovaná pro každou architekturu procesoru podporovanou v počítači, aby bylo možné kompilaci pro aplikace, které cílí na jednotlivé architektury:

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

Úloha nativní bitové kopie je dostupná v .NET Framework 4.5 a novějších verzích při spuštění v Windows 8 nebo novějším. V dřívějších verzích Windows používá .NET Framework službu Native Image Service.

Doba života úlohy

Obecně platí, že Windows Plánovač úloh spouští úlohu nativní bitové kopie každou noc, když je počítač nečinný. Úloha kontroluje všechny odložené práce, které jsou zařazené do fronty instalačními programy aplikací, všechny odložené žádosti o aktualizaci nativních bitových bitových kopií a všechny automatické vytváření i image. Úkol dokončí nevyřízené pracovní položky a pak se vypne. Pokud počítač přestane být nečinný, zatímco 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č úloh nebo ručními voláními NGen.exe. Pokud je úloha spuštěna některou z těchto metod, bude spuštěna i v případě, že počítač už není nečinný. Image vytvořené ručně pomocí NGen.exe se upřednostní, aby bylo možné předvídatelné chování instalačních programů aplikací.

Nativní bitová kopie služby

Nativní služba bitových kopií je Windows, která generuje a udržuje nativní bitové kopie. Nativní služba bitových kopií 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ích bitových kopií 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 v počítači. Služba šetří svůj stav a v případě potřeby může pokračovat několika restartováními. Do fronty lze zařadit více kompilací obrázků.

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

Poznámka

V Windows Vista se pro nativní službu bitových kopií zobrazuje 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 má 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 po pozastavení. Tím se zajistí, že se služba nebude spouštět, když instalační program kopíruje soubory nebo ukládá sestavení do globální mezipaměti sestavení (GAC). Následující Ngen.exe příkazový řádek pozastaví službu:

ngen queue pause

Po zařadit všechny odložené operace do fronty umožní následující příkaz obnovení služby:

ngen queue continue

Pokud chcete odložit generování nativních bitových kopií při instalaci nové aplikace nebo při aktualizaci sdílené komponenty, použijte možnost /queue s install update akcemi nebo . Následující Ngen.exe příkazového řádku nainstalují nativní bitovou kopii pro sdílenou komponentu a aktualizují všechny kořenové adresáře, kterých se to může týká:

ngen install MyComponent /queue
ngen update /queue

Akce update znovu vygeneruje všechny nativní bitové kopie, které byly zneplatněny, 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řadit instalaci tří kořenových kořenových adresářů do fronty. Assembly1 se nainstaluje jako první, aniž by se čekalo na dobu nečinnosti. Assembly2 je také nainstalován bez čekání na dobu nečinnosti, ale po dokončení všech akcí s prioritou 1. Assembly3 se nainstaluje, když služba zjistí, že je počítač nečinný.

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

Pomocí akce můžete vynutit synchronní zpracování akcí zařazených do executeQueuedItems fronty. Pokud zadáte volitelnou prioritu, bude mít tato akce vliv pouze na 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 nevrátí se, dokud se nedokončí:

ngen executeQueuedItems

Synchronní příkazy jsou spouštěny Ngen.exe a nepoužívejte nativní službu bitových kopií. Akce můžete provádět pomocí Ngen.exe, když je spuštěná nativní služba bitových kopií.

Vypnutí služby

Po spuštění příkazu Ngen.exe, který obsahuje možnost , služba běží na pozadí, dokud se /queue nedokončí 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 ve frontě nejsou žádné další akce, resetuje svůj stav, aby se nerestartoval při příštím spuštění počítače a pak se sám vypne.

Interakce služby s klienty

V .NET Framework verze 2.0 je jediná interakce s nativní službou bitových kopií 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 nativní bitové kopie do fronty a komunikovat se službou.

Viz také