Avez-vous déjà utilisé ngen.exe?
A quelqu'un ici jamais utilisé ngen? Où? pourquoi? Y avait-il une amélioration de la performance? quand et où est-il judicieux de l'utiliser?
- Exécuter
ngen /show
pour voir qui l'utilise 🙂
Vous devez vous connecter pour publier un commentaire.
Oui, j'ai vu des améliorations de performances. Mes mesures a indiqué qu'elle ne améliorer les performances au démarrage si j'ai aussi mis mon assembly dans le GAC depuis mes assemblages sont tous fort nommé. Si vos assemblées sont fort nommé, NGen ne fera aucune différence sans l'aide de la GAC. La raison pour cela est que si vous avez une forte nommé assemblées qui ne sont pas dans le GAC, puis l' .NET runtime permet de vérifier que votre nom fort de l'assemblée n'a pas été altéré par le chargement de l'ensemble de l'assembly géré à partir du disque de sorte qu'il peut valider de contourner l'un des principaux avantages de NGen.
Ce n'était pas une très bonne option pour ma demande puisque nous nous appuyons sur la commune des assemblées de notre société (qui sont aussi fort nommé). La commune ensembles sont utilisés par de nombreux produits qui utilisent de nombreuses versions différentes, de les mettre dans le GAC veut dire que si l'une de nos applications n'ai pas dit que "l'utilisation de la version spécifique" de l'une des assemblées ordinaires, il serait de charger le GAC version indépendamment de ce que la version était dans son répertoire d'exécution. Nous avons décidé que les bénéfices de la NGen n'en valent pas les risques.
Je ne l'utilise pas au jour le jour, mais il est utilisé par les outils que vous voulez booster les performances; par exemple, Paint.NET utilise NGEN lors de l'installation (ou peut-être de la première utilisation). Il est possible (bien que je ne sais pas pour vous) que certains des outils MS faire, trop.
Fondamentalement, NGEN effectue une grande partie de l'équipe pour un montage à l'avant, de sorte qu'il y a très peu de retard sur un démarrage à froid. Bien sûr, dans la plus typique d'utilisation, pas de 100% du code est jamais atteint, donc, d'une certaine façon cela fait beaucoup de inutile travail - mais il ne peut pas dire que l'avance de temps.
Le revers de la médaille, l'OMI, est que vous devez utiliser le GAC à utiliser NGEN; j'essaie d'éviter le GAC autant que possible, de sorte que je peux utiliser robocopy-déploiement (pour les serveurs) et ClickOnce (pour les clients).
Ngen principalement réduit le temps de démarrage d' .NET application et l'application de l'ensemble de travail. Mais il a ses inconvénients (à partir de CLR Via C# de Jeffrey Richter):
Pas De Protection De La Propriété Intellectuelle
NGen avais les fichiers peuvent sortir de la synchronisation
Inférieure De La Charge De La Performance En Temps (Année De Référence/De Liaison)
Inférieure De L'Exécution De La Performance En Temps
En raison de tous les problèmes que nous venons d'énumérer, vous devriez être très prudent lorsque l'on envisage l'utilisation de
NGen.exe. Pour les applications côté serveur, NGen.exe fait peu ou pas de sens, car seul le
la première demande du client, des expériences de dégradation des performances; les futures demandes des clients tournent à haute vitesse. Dans
plus, pour la plupart des applications de serveur, une seule instance de ce code est nécessaire, alors il n'est pas
jeu de travail de bénéficier.
Pour les applications client, NGen.exe peut faire sens pour améliorer le temps de démarrage ou de réduire
jeu de travail si un assemblage est utilisé par plusieurs applications simultanément. Même dans le cas d'un
qui une assemblée n'est pas utilisé par plusieurs applications, NGen avec une assemblée pourrait améliorer
jeu de travail. En outre, si NGen.exe est utilisé pour tous les d'un client de l'application des assemblées, le CLR
n'aurez pas besoin de charger le compilateur JIT, de réduire le jeu de travail encore plus loin. Bien sûr, si
juste une assemblée n'est pas NGen avais ou si une assemblée NGen avais fichier ne peut pas être utilisé, le compilateur JIT
charge, et l'application de l'ensemble de travail augmente.
No Intellectual Property Protection
?ngen
est surtout connue pour améliorer les temps de démarrage (en éliminant la compilation JIT). Il pourrait s'améliorer (par la réduction des temps JIT) ou une diminution globale de la performance de l'application (depuis quelques optimisations JIT n'est pas disponible)..NET Framework lui-même utilise
ngen
pour de nombreuses assemblées lors de l'installation.je l'ai utilisé, mais seulement à des fins de recherche. utilisez-le SEULEMENT si vous êtes sûr à propos de l'architecture du processeur de votre environnement de déploiement (il l'habitude de changer)
mais laissez-moi vous dire compilation JIT n'est pas trop mauvaise et si vous avez des déploiements sur plusieurs cpu environnements (par exemple, une application client windows qui est souvent mis à jour), ALORS NE PAS UTILISER de NGEN. c'est coz valide ngen cache dépend de nombreux attributs. si l'un de ces échoue, votre assemblée revient à jit nouveau
JIT est un gagnant clair dans de tels cas, il optimise le code à la volée basé sur l'architecture du processeur de son en cours d'exécution sur. (pour exemple, il peut détecter si il y a plus de 1 cpu)
et clr est de mieux en mieux à chaque sortie, donc en bref bâton avec JIT, sauf si vous êtes morts sûr de votre environnement de déploiement - même alors vos gains de performance ne serait guère justifier l'utilisation de l'ngen.exe (probablement les gains seraient en quelques centaines de ms) - à mon humble avis - sa ne vaut pas les efforts
également vérifier cette véritable lien sympa sur ce sujet - Compilation JIT et de Performance À NGen ou de ne Pas NGen?
ngen
ed assemblée à partir de votre ordinateur de développement. Pouvez-vous développer?ngen
ed assemblées des machines clientes?ngen
.Oui. Utilisé sur une application WPF pour accélérer les temps de démarrage. Le temps de démarrage est passé de 9 à 5 secondes. Lire à ce sujet dans mon blog :
Comme un complément à Mehrdad Afshari du commentaire à propos de compilation JIT. Si la sérialisation d'une classe avec beaucoup de propriétés via le XmlSerializer et sur un système 64 bits un SGEN, NGEN combo a un potentiel énorme (dans notre cas gigaoctets et minutes) de l'effet.
Plus d'infos ici:
XmlSerializer de démarrage ÉNORME perte de performances sur les systèmes 64 bits voir Nick Martyshchenko réponse en particulier.
Oui, je l'ai essayé avec un petit single CPU-intensive exe et avec ngen il est un peu plus lent!
J'ai installé et désinstallé à l'image ngen plusieurs fois et a couru un test.
J'ai toujours eu des moments suivants reproduit +/- 0,1 s:
33.9 s sans,
35.3 s avec