Comment et quand fonctionne ngen.exe?
Je veux savoir le bénéfice de la pré-compilation JIT (ngen.exe). Quel est le rôle de la Génération D'Images Natives (NGen) et pourquoi est-elle nécessaire?
Veuillez fournir un exemple.
source d'informationauteur Dhiren | 2013-12-16
Vous devez vous connecter pour publier un commentaire.
Pour l'exécution de code sur la .NET plate-forme, le Common Intermediate Language (CIL) de la représentation doit être traduit en code machine. Si cela se produit immédiatement avant l'exécution de la présente est désigné comme JIT (Just In Time) de la compilation. Sortie de JIT n'est pas conservée si votre application gérée doit passer par JIT pour chaque lancement.
Alternativement, vous pouvez utiliser de pré-compilation de réduire de démarrage des frais généraux liés avec compilation JIT. NGen réalise des pré-compilation et conserve les images natives dans une image native de cache. Ensuite, les applications peuvent s'exécuter avec les images natives et peut éprouver des temps de démarrage plus rapide en raison de la réduction compilation JIT frais généraux. D'abord, NGen est une installation de la technologie, les développeurs ont fait de l'application des installateurs question NGen commandes de déclenchement de la pré-compilation lors de l'installation. Pour plus de détails, consultez http://msdn.microsoft.com/en-us/magazine/cc163808.aspx. Cet article fournit un exemple d'application qui tire parti de NGen.
Avec Windows 8 (.NET 4.5), une nouvelle NGen mode: "Auto NGen" a été introduit. Fondamentalement, l' .NET runtime génère des journaux d'utilisation pour les applications gérées. Lorsque le système est inactif, une maintenance automatique de la tâche s'exécute en arrière-plan et génère des images natives. De cette façon, les développeurs n'ont plus à faire face avec NGen explicitement. Notez que cette fonctionnalité n'est activée .NET 4.5+ applications qui ciblent Store de Fenêtre ou de l'utilisation de la GAC. Voici une page MSDN qui peuvent être utiles:
http://msdn.microsoft.com/en-us/library/hh691758(v=vs. 110).aspx
Et c'est aperçu de haut niveau de NGen et les technologies associées:
A un besoin de vitesse? .NET applications de démarrer plus rapidement
Enfin, .NET framework bibliothèques elles-mêmes utiliser NGen pour de meilleures performances. Lors de l' .NET framework est desservi, certaines des images natives invalidé. Puis NGen doit fonctionner à re-générer les invalides images natives. Ceci est fait automatiquement par l'intermédiaire de l' .NET Runtime Optimization service qui s'exécute pendant la période d'inactivité.
Quand un .NET compilateur compile en C# ou VB.NET le code de la moitié compile et crée CIL code. Lorsque vous exécutez cette demi-compilé .NET fichier EXE de l'équipe fonctionne dans le fond et compile le demi-CIL code en pleine langage machine. Ce mode est considéré comme normal JIT.
Vous pouvez aussi aller dans l'autre sens en disant que vous ne voulez pas la compilation d'exécution en cours d'exécution complet d'un fichier EXE établi. Cette compilation est effectuée en utilisant negen.exe. Dans ce scénario, l'équipe ne participe pas à l'exécution. Ce qui est considéré comme pré-JIT mode.
Si vous voulez voir comment ils affectent les performances, vous pouvez voir cette vidéo sur YouTube qui montre normale-JIT et pré-JIT mode de compilation:
Expliquer JIT, Ngen.exe Pré-jit, Normal-Jit et Econo-Jit.? (.NET des questions d'entrevue)
Par MSDN:
J'ai utilisé NGEN dans le passé lors de l'installation de sorte que le logiciel permet de démarrer plus rapidement.
NGen (Génération d'Images natives) en gros compile .NET de byte code (CIL) en code natif pour l'ordinateur, il est en cours d'exécution sur. L'avantage est que, étant donné que vous n'êtes pas de la compilation du code natif à chaque fois, de l'exécuter ou d'en avoir besoin, mais vous n'avez qu'une seule fois, le démarrage de l'application et d'exécuter plus rapidement. Si vous souhaitez plus d'informations, il y a beaucoup de ressources sur les avantages de JIT contre l'Avance de Temps de Compilation (qui est ce que NGen).