2014-07-14 3 views

Répondre

3

Le format de fichier PE est utilisé sur Windows pour stocker le code exécutable, les fichiers DLL et EXE. C'est un format très flexible, il peut contenir beaucoup plus de choses que du code. Une fonctionnalité que .NET exploite, un assembly .NET est un fichier PE avec seulement 5 octets de code. Le reste est toutes les données. Vous pouvez le comparer à un fichier Java .jar. Ces données sont un en-tête qui identifie la version d'exécution requise. Un morceau de métadonnées qui décrit les types dans l'assemblage. Et un morceau de MSIL, le code intermédiaire qui sera juste-à-temps compilé au code machine à l'exécution.

Vous n'avez pas besoin de ilasm.exe pour générer un tel fichier. Tout compilateur .NET sait comment en créer un. Sous le capot, ils utilisent tous la même api de bas niveau pour écrire un assemblage. Ngen.exe est optionnel, il peut aider à améliorer le démarrage à chaud d'un programme et contourner le besoin de juste-à-temps de compiler le code MSIL en code machine. Au lieu de le faire à l'exécution, Ngen le fait à l'avance. Le code machine généré est stocké dans un fichier dans c: \ windows \ assembly. Le CLR le trouvera là-bas lorsque vous exécuterez le programme et passera l'étape de jitting, en utilisant le code machine dans le fichier à la place. L'assembly d'origine est toujours requis pour les métadonnées.

Le point clé est que ngen.exe est facultatif. C'est pas toujours préférable de compiler à l'avance, il fait en fait le démarrage à froid d'un programme plus lent car il nécessite le CLR pour trouver un fichier supplémentaire. Les temps de démarrage à froid sont dominés par le disque, ils sont lents.

Questions connexes