2008-10-10 3 views
8

Vous vous demandez simplement si une application .NET peut être compilée en code machine natif à l'avance? Je ne prévois pas de le faire même si je le pouvais; Je suis juste curieux.Une application .NET peut-elle être compilée en natif?

Merci

+1

@Cody Merci pour les corrections d'orthographe qui m'apprendront à ne pas lire avant d'appuyer sur Entrée. –

Répondre

11

Vous pouvez utiliser NGen pour le compiler à l'avance, mais cela dépend encore du framework .NET. Salamander de Remotesoft (une application commerciale) peut faire une application sans cadre.

1

ngen peut être utilisé pour 'pré-JIT' une image, de sorte qu'il est disponible sur le disque sous forme native pour réduire le temps de démarrage de l'application.

+0

BTW: Les applications compilées par ngen s'exécutent-elles plus lentement que la norme .net (malgré le démarrage)? Je pensais que le compilateur JIT pouvait faire beaucoup d'optimisation à l'exécution, en particulier avec les expressions lambda. – Dario

5

Vous pouvez compiler IL en binaires natifs. Il y a des produits qui le font.

La grande question est devrait vous ...

Si vous souhaitez supprimer toutes les dépendances dot net à courir sans point net

Fondamentalement, ce que ces produits font est précompilant vers le bas au niveau de la machine (x86 habituellement), puis en incluant statiquement toutes les librairies requises dans votre exe. Cela entraîne généralement un énorme exe. Et, plus important encore, vous n'avez plus vraiment le temps d'exécution sur votre machine cible. Vous avez une partie de l'exécution que le compilateur natif a choisi d'incorporer.

Si vous voulez simplement obtenir un temps

plus rapide JIT Vous pouvez également utiliser NGen pour compiler un binaire natif, mais vous avez encore toutes les dépendances sur dot net. Mais les machines cibles ont encore besoin du framework, etc.

Mais, quand vous ngen vous perdez la possibilité pour l'application de promouvoir automatiquement jusqu'à 64 bits. Si votre application est précompilée, vous devez forcer un mode. Si un utilisateur s'exécute sur une machine 64 bits, votre code IL aurait été promu (à moins que vous ne l'ayez signalé).

L'heure JIT n'est pas votre plus gros goulot d'étranglement dans la plupart des applications. C'est le chargement des bibliothèques d'infrastructure et d'autres exigences connexes.

Si vous en avez vraiment besoin, vous pouvez utiliser ngen dans une application de configuration pour obtenir la machine cible des utilisateurs actuels.

J'ai récemment appris que vous ne pouvez pas NGEN une application et attendez-vous à tirer parti du processeur comme vous pouvez avec le JIT. Lorsque vous exécutez NGEN est toujours optimise la sortie pour un PentiumPro pour une raison quelconque, et ne profitera pas de choses comme SSE, SSE2, etc. Donc je dirais que cela supprime NGEN comme un cas d'utilisation raisonnable.

1

Mono a une date de début (AOT) compiler qui peut émettre du code natif.

Questions connexes