J'ai récemment inspecté les performances d'une application F # et en explorant le CIL, j'ai découvert que FSharp.Core (pour .NET v4.0) contient plusieurs instructions nop, de nombreuses variables inutilisées et des variables qui ne sont écrites que/lire une fois via des séquences d'instructions stloc/ldloc. J'ai étudié les causes possibles et j'ai remarqué que même en mode release, les assemblys F # incluent la directive --debug: pdbonly et il n'y a aucun moyen de désactiver cela et de passer à --debug- à partir de l'interface utilisateur du projet.
Je me demande s'il y avait un choix spécifique pour les paramètres de compilation de FSharp.Core et si c'était le cas. Sinon, est-il légitime d'attendre une version entièrement optimisée du runtime?FSharp.Core non optimisé?
Répondre
Il semble que les commentaires sur la question ont déjà répondu à environ 90% de cette question; de les réitérer:
- presque tous les binaires de libération dans l'univers est compilé avec --debug: pdbonly
- même si le code IL est sous-optimal, cela peut ne pas avoir d'impact dans le monde réel en raison de la JIT optimisant loin
il y a, bien sûr, toutes sortes de façons le compilateur F # pourrait être potentiellement émettre un meilleur code (ce qui est probablement vrai de chaque compilateur); Si vous profilez votre application et remarquez quelque chose de mauvais (par exemple un gros écart par rapport à un code comparable de C#), vous pouvez informer l'équipe F # en envoyant des fsbugs. Mais mesurez d'abord.
Sinon, est-il légitime d'attendre une version entièrement optimisée du runtime?
Les modifications que vous suggérez ne peuvent raisonnablement pas être considérées comme des optimisations. Les deux sont inoffensifs et seront compilés par la VM. ISTR, la mutation est utilisée pour remplacer l'empilement car la machine virtuelle basée sur la pile peut empiler le débordement. Donc c'est F # qui fonctionne correctement autour d'un bug dans le CLR.
- 1. FSharp.Core.sigdata introuvable à côté de FSharp.Core
- 2. Code optimisé sous Unix?
- 3. Référence FSharp.Core de Visual Web Developer Express
- 4. Zend_Paginator; Est-ce optimisé?
- 5. NETCF - Repaint optimisé (onPaint)
- 6. Produit scalaire optimisé en Python
- 7. iPhone: dessin optimisé en quartz
- 8. mysql - Alternative/efficace/optimisé requête
- 9. Impossible de charger le fichier ou l'assemblage FSharp.Core, Version = 4.0.0.0
- 10. Code C++/C optimisé pour le profil
- 11. Est-ce que cela peut être optimisé?
- 12. directives Apache VHost Optimisé pour Pagespeed
- 13. Comment ce code peut-il être optimisé?
- 14. Vous cherchez un code mal optimisé
- 15. Cet extrait peut-il être optimisé/organisé?
- 16. Le destructeur inutilisé sera-t-il optimisé?
- 17. Ce code peut-il être optimisé?
- 18. Ce code peut-il être optimisé davantage?
- 19. ToString() est optimisé par le compilateur?
- 20. iPhone Compile architecture: Standard vs optimisé
- 21. recherche tableau indexé optimisé pour plus-que le nombre
- 22. ce script python peut être raccourci/optimisé, comment?
- 23. comment puis-je rendre ce code plus optimisé
- 24. optimisé ce code et le rendre plus dynamique
- 25. Meilleure approche du service Web optimisé par un démon
- 26. Débit optimisé du contenu statique du serveur d'applications
- 27. Afficher mon pays basé sur mon IP, mysql optimisé
- 28. doute sur une queue de code optimisé sous « gdb »
- 29. Ordre optimisé des attributs HTML pour la compression
- 30. Y compris FSharp.Core dans un projet C#: résoudre les collisions de type
Question connexe http://stackoverflow.com/questions/1612543/nop-in-release-build-of-f-code –
'--debug: pdbonly' est normal pour le code de version, cela ne comprend que des informations de débogage limitées et permet de décoder les piles. Tout Windows (y compris .NET) est construit comme ça: c'est ainsi que MS peut fournir des symboles sur leurs serveurs Symbol. – Richard
@Richard: merci. Je soupçonnais des raisons liées au débogage, mais je me demandais s'il y aurait des avantages en termes de performances avec une version plus optimisée ... Dans les applications critiques pour les performances, on pourrait espérer pouvoir sacrifier la capacité de débogage cpu cycle ... – em70