Je me demandais s'il y avait un moyen de changer le comportement du compilateur .NET JIT, en spécifiant une préférence pour des optimisations plus approfondies. A défaut, il serait bien qu'il puisse faire une sorte d'optimisation guidée par le profil, si ce n'est déjà fait.Y at-il un moyen de modifier le compilateur .NET JIT pour favoriser les performances au cours de la compilation?
Répondre
Ceci est défini lorsque vous compilez votre assembly. Il existe deux types d'optimisations:
- IL optimisation
- qualité JIT code natif.
Le réglage par défaut est ce
/optimize- /debug-
Cela signifie unoptimized IL, et optimisé le code natif.
/optimize /debug(+/full/pdbonly)
Ceci signifie IL non optimisé, et code natif non optimisé (meilleurs paramètres de débogage).
Enfin, pour obtenir les meilleures performances:
/optimize+ /debug(-/+/full/pdbonly)
Produit une optimisé IL et optimisé du code natif.
Lors de la production de IL non optimisé, le compilateur insère des instructions NOP partout dans le code. Cela rend le code plus facile à déboguer en permettant de définir des points d'arrêt sur des instructions de flux de contrôle telles que, pendant, si, sinon, essayez, attrapez etc.
Le CLR fait un excellent travail d'optimisation du code. Une fois qu'une méthode est JIT'ed, le pointeur sur un appel ou une instruction callvirt est dirigé directement vers le code natif.
En outre, le CLR profitera de toutes les astuces d'architecture disponibles lors de l'exécution de votre code. Cela signifie qu'un assembly exécuté via le JIT s'exécutera plus vite qu'un assembly pré-compilé en utilisant Ngen (bien qu'avec un temps de démarrage légèrement plus lent), car NGen compilera pour toutes les plateformes, et ne tirera aucun avantage des astuces.
- 1. JIT compilation et DEP
- 2. Performances de compilation CSharpCodeProvider
- 3. Introduction simple au JIT et à la compilation/génération dynamique de code
- 4. Comment fonctionne la compilation JIT pour la mise en cache?
- 5. Temps d'accélération JIT pour les services Web .NET
- 6. Y at-il un drapeau devenv pour désactiver la génération pdb au moment de la compilation?
- 7. Forcer le compilateur .NET JIT à générer le code le plus optimisé lors du démarrage de l'application
- 8. Existe-t-il un moyen d'améliorer les performances multicœur/multiprocesseur du compilateur Java?
- 9. Les performances se dégradent lors de la compilation avec _win32_winnt = 0x0501 au lieu de 0x400
- 10. Y at-il un moyen de tester les applications Comet sans un navigateur en cours d'exécution?
- 11. Y at-il un moyen de modifier les en-têtes HTTP pour IE6?
- 12. Quand Java a-t-il obtenu un compilateur JIT?
- 13. Le compilateur JIT a rencontré une limitation interne. VS2008
- 14. Performances ASP.net et requêtes de compilation
- 15. Conseils pour surveiller ou accélérer la compilation ASP.NET au cours du cycle de développement
- 16. Y at-il un travail en cours pour créer un compilateur C# pour produire des fichiers exe natifs?
- 17. Modifier les en-têtes de la page en cours de chargement dans un iframe
- 18. Compilateur Prolog pour .Net
- 19. L'utilisation de .Net OnSerializingAttribute pour modifier les noms de variables?
- 20. Y at-il un moyen de modifier les attributs d'une classe?
- 21. compilateur en cours d'exécution sur un réseau
- 22. Résoudre l'erreur de compilation boost.thread avec le compilateur Metrowerks
- 23. Cours de design .NET?
- 24. Erreur du compilateur - uniquement lors de la compilation à partir de la ligne de commande
- 25. Existe-t-il un meilleur moyen de comparer les performances générales de .Net et Java dans un environnement de commerce électronique que le «magasin pour animaux de compagnie»?
- 26. Le meilleur moyen de modifier les enregistrements personnalisés dans ASP.NET?
- 27. Vérification de l'utilisation de la pile au moment de la compilation
- 28. Comment forcer la compilation C++ sur un fichier .c à l'aide du compilateur MIPS de VxWorks?
- 29. Y at-il un moyen d'exporter l'application powerbuilder au texte?
- 30. Y at-il un moyen de désactiver/remplacer le style par défaut pour les WebControls désactivés
+1 Nice. Où exactement dans l'EDI vous définissez ces valeurs? – Trap
Dans VS2010 (et versions antérieures IIRC), activez le paramètre de projet "Optimiser le code", qui est activé par défaut dans la configuration Release. (Ceci est équivalent à '/ optimize', ce qui équivaut à'/optimize + '.) Notez que l'optimiseur est [loin de la perfection] (http://stackoverflow.com/questions/10369421/why-does-adding-local -variables-make-net-code-plus lent). –
Il n'y a pas de trucs par machine, AFAIK. On m'a dit que l'équipe .NET pensait que le maintien de plusieurs versions de l'optimiseur JIT (qui est une bête très complexe) était trop coûteux par rapport à l'avantage potentiel. –