Lors du déploiement des applications .Net, les développeurs ont le choix entre l’intégration des composants comme les bibliothèques .Net Core et le runtime .Net Core dans leurs applications ou simplement utiliser les dépendances et les bibliothèques de .Net Core.
Dans le premier cas, cela présente l’avantage de ne pas être dépendant de la présence des bibliothèques et de l’environnement d’exécution de .Net Core sur le système hôte. Toutefois, le paquet à déployer sera relativement volumineux en raison des différents composants intégrés à l’application. Dans le second cas, les développeurs auront un binaire assez réduit, mais dépendant de la présence des composants .Net Core sur le système qui recevra l’application conçue.
Bien que chacune de ces options présente des avantages et des inconvénients, Microsoft vient de présenter.Net IL Linker pour faciliter la tâche aux applications intégrant les ressources de .Net Core, l’assemblage modulaire de composants initialement disponibles dans le Framework .Net. Un linker est un outil que l’on peut utiliser pour déterminer un ensemble de fonctions dont un programme a besoin pour fonctionner au lieu d’utiliser des bibliothèques entières.
.Net IL Linker quant à lui s’inscrit dans cette même idée et se présente comme un outil qui permet de marquer le code non utilisé dans une application afin de le supprimer pour réduire la taille de l’application et son empreinte mémoire. Pour l’instant, le linker conserve le code dans l’application et ses dépendances qui ne sont liées au framework tout en supprimant uniquement les parties inutilisées du code assemblé du Framework. Mais cela pourrait évoluer à l’avenir.
Pour atteindre son objectif, .Net IL Linker parcourt les racines (classes, les méthodes, les propriétés, etc.) pour déterminer les fonctions, classes et dll qui sont appelées par ces premiers composants. Lorsque certains bouts de code restent isolés et non référencés par une partie du code dans l’application, .Net IL Linker se charge de supprimer ce code non utilisé.
Pour parcourir l’ensemble du code de l’application, le linker utilise Cecil, une bibliothèque utilisée par l’équipe de Mono afin de générer et inspecter les programmes et bibliothèques dans le code intermédiaire. Comparativement à .Net IL Linker, là où l’inspection et la modification du code se feront de manière manuelle pour réduire la taille de l’application, .Net IL Linker effectuera son inspection automatiquement.
À ce niveau, Microsoft reconnaît qu’il y a des efforts encore à faire, car lors des recherches de code mort en utilisant la technique de réflexion pendant l’exécution du programme, .Net IL Linker n’est pas en mesure de déterminer de manière exacte quel code sera appelé ou pas. Ainsi, il y a des cas où le linker supprime du code qui ne doit pas être supprimé. Pour résoudre ce problème, l’équipe allouée à ce projet compte ajouter à l’avenir des techniques heuristiques plus sophistiquées pour corriger ces problèmes liés à l’usage de la réflexion, mais même malgré cela, le problème général sera toujours réel. Une des solutions viables sera d’implémenter un mécanisme par lequel les développeurs peuvent expliquer explicitement au linker les parties du code à considérer comme les racines.
.Net IL Linker est actuellement disponible en version preview et prend en charge uniquement les applications .Net Core « Self Cotained » qui sont des applications intégrant les composants comme les bibliothèques et le runtime .Net Core en leur sein afin de ne pas être dépendants de ces composants lors du déploiement sur système cible. Selon les tests effectués par Microsoft, « dans des cas triviaux, le linker peut réduire la taille des applications de 50 %. Les gains de taille peuvent être plus favorables ou plus modérés pour les applications plus importantes. »
Les développeurs sont donc invités à effectuer des tests et faire un retour sur l’efficacité de cet outil.
Source : GitHub
Et vous ?
Avez-vous testé cet outil ?
Quel retour d’expérience en faites-vous ?
Voir aussi
Microsoft annonce des améliorations de performance dans .Net Core 2.0 après une réécriture des composants du runtime et des bibliothèques de base
Microsoft intègre la compilation native PGO dans .Net Core 2.0 afin de permettre aux applications Linux x64 et Windows x86 de s'exécuter plus vite
Microsoft annonce la préversion de .Net IL Linker
Son outil d'analyse et de suppression de code mort dans les applications .Net Core
Microsoft annonce la préversion de .Net IL Linker
Son outil d'analyse et de suppression de code mort dans les applications .Net Core
Le , par Olivier Famien
Une erreur dans cette actualité ? Signalez-nous-la !