[Techdays 2013] Plongée au cœur du Framework .NET 4.5

downloadVoici un retour sur la session intitulée « Plongée au cœur du Framework .NET 4.5 ». Cette session a eu lieu ce mardi lors des TechDays. Elle a été animée par Bruno Boucard et Julien Crozon de 11h à 12h.

Ils ont présenté les nouveautés, notamment celles du garbage collector, du Jitter, de l’amélioration de la fonction de debugging ainsi que de la concurrence.

Garbage collector

Rappel : le garbage collector sert à gérer la mémoire, et notamment celle allouée à vos applications. C’est lui qui est appelé à chaque fois que vous faites un new. C’est également lui qui s’occupe de libérer la mémoire quand vous atteignez certaines limites.

Le GC est générationnel : plus un objet est récent plus courte sera sa durée de vie. Le GC travaille en gros sur trois collections :

  • Objets de génération 0 : ceux alloués depuis la dernière collecte
  • Objets de génération 1 : qui ont survécu à une collecte
  • Objets de génération 2 : qui ont survécu à la collecte de génération 1 et qui, vu qu’ils sont encore utilisés, passent dans une mémoire d’objets à longue vie (ils seront moins collectés)

Voyons maintenant ce qui a été présenté.

Mode Server

Nous avons maintenant la possibilité de configurer le garbage collector d’une application en mode Workstation ou Server.

Globalement, le comportement normal est le mode Workstation et il faut utiliser le mode Server QUE pour UNE application critique. A savoir une application qui a besoin de haute disponibilité et de performances.

A noter qu’avoir deux applications avec un garbage collector configuré en mode server va grandement détériorer l’utilisation du serveur puisque deux applications vont obtenir le niveau de priorité de thread le plus haut : THREAD_PRIORITY_HIGHEST. Il y aura donc des problèmes de concurrence entre les deux applications.

Server garbage collection

Pour plus d’informations : http://msdn.microsoft.com/en-us/library/ee787088.aspx#workstation_and_server_garbage_collection

 Mode Concurrent

La seconde nouveauté présentée du garbage collector est l’amélioration du mode concurrent. Elle permet de le lancer dans un thread pour suspendre les threads applicatifs beaucoup moins longtemps.

Concurrent garbage collection

Pour plus d’informations : http://msdn.microsoft.com/en-us/library/ee787088.aspx#workstation_and_server_garbage_collection

 Mode de Latence

A ensuite été présenté le mode de latence SustainedLowLatency qui complète la liste des latency mode disponibles depuis .net 4 : Batch, Interactive et LowLatency. Il permet globalement d’empêcher le GC de se déclencher pendant un traitement où son lancement pourrait faire perdre de la donnée.

Pour plus d’informations : http://msdn.microsoft.com/en-us/library/bb384202(v=vs.110).aspx

Large Object Heap (LOH)

Le LOH est l’endroit où le GC met les objets de plus de 85kb. Le temps d’allocation dans le LOH a été optimisé. Le gain est de l’ordre de 30%. On peut également maintenant y allouer des objets de plus de 2go.

Après avoir vu les améliorations du GC, nous sommes passés sur le Jitter.

Jitter

Le Jitter est l’entité qui transforme le code précompilé (IL) en code natif.

 Multicore JIT

L’amélioration apportée est le multicore JIT qui permet un gain de  20 à 50% de rapidité au lancement des applications.

Pour plus d’informations, voir les infos sur ProfileOptimization : http://msdn.microsoft.com/fr-fr/library/system.runtime.profileoptimization.aspx

 MPGO : Managed Profile Guided Optimization

Le MPGO est un exécutable qui va permettre de générer des informations de profiling de l’application qui seront ensuite utilisées par NGEN pour optimiser l’application.

Une des optimisations présentées est le regroupement des méthodes les plus utilisées dans une même page mémoire. Il y aura ainsi moins de chargements de pages puisque la ou les pages seront gardées en mémoire car constamment utilisées. Il en résultera une performance accrue de l’application.

 NGEN automatique

Attention, ceci est disponible uniquement sous Windows 8. Certaines librairies, suivant leur fréquence d’utilisation, vont être jittées ou non. Des images natives vont donc être générées pour les assemblies les plus utilisées.

Debugging

Il est maintenant possible de profiler temporairement du code, puis de désactiver ce profiling, sans redémarrer le process. En gros on JIT à la volée quand on en a besoin. L’exemple qui a été donné était de debugger un environnement de production sans redémarrer l’applicatif.

Voir : ICoreDebugProcess

Concurrence

Le dernier point abordé est celui de la concurrence et de l’asynchronisme. De nombreuses nouveautés apparaissent avec ce framework 4.5.

Le constat est que dans les anciennes versions du framework, le code itératif et les continuations ne pouvaient pas être mélangées proprement. C’est sur ce constat que sont arrivés les mots clés async et await. De plus leur utilisation ne pose pas de soucis d’appels cross thread. Le debugger a même été modifié pour permettre le debug de ces méthodes en synchrone.

Quelques classes du framework implémentent déjà ces verbes tels que le HttpClient.

Notre interlocuteur nous a également mis en garde vis-à-vis de ces verbes et recommande de ne pas les utiliser sur des traitements < 500ms car cela l’allongerait du fait de la création d’une machine à états en background.

Plus d’info ici : http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx

Après avoir passé un grand moment sur async await et les Tasks, il a énuméré quelques autre nouveautés liées à la concurrence :

  • ConcurrentExclusiveSchedulerPair : Support pour orchestrer des tâches lecteur rédacteur
  • Le CancellationTokenSource gère maintenant un timeout
  • ThreadLocal<T>.Values Facilite l’implémentation du pattern Fork/Join avec réduction
  • TaskCreationOptions : Plus de contrôle avec l’intégration de code venant de tierces parties
  • Enumerable ParralelOption : On peut désactiver la partition

Autres améliorations

Après avoir vraiment insisté sur les points précédents, les deux orateurs nous ont donné quelques améliorations intéressantes, à savoir :

  • Amélioration de Plink
  • TPL Dataflow qui est fait pour de la perf quand on gère de grosses masses de données
  • Les modifications de la Parrallel Stack
  • D’autres modifications d’outils de debugging

Conclusion

Ce framework 4.5 est un framework d’optimisation de l’existant et d’aide à son utilisation. Il propose au développeur de meilleurs et plus nombreux outils pour mieux gérer son application. Les deux gros sujets d’améliorations sont la gestion de la mémoire et le couple asynchrone parallélisme.

Quand à la session, elle était très riche et du coup très intéressante.

Si vous voulez plus d’informations sur le sujet, ce lien est fait pour vous : http://msdn.microsoft.com/en-us/magazine/hh882452.aspx

Nombre de vue : 35

AJOUTER UN COMMENTAIRE