Upload
cellenza
View
185
Download
1
Embed Size (px)
Citation preview
Présentation de Cellenza
Cabinet de consei l IT exc lus ivement dédié
aux technologies Microsof t e t aux méthodes
Agi les
Comment nous le
fa isons :
• Format ion con t inue
• Par tage de conna issance
• Par tenar ia ts
Notre pass ion, les technologies MS
N o us s o mm es des e xpe r t s M ic ros o f t ,
ag i l i s t es p a r na tu re , p ass i onnés pa r no t re
m ét i e r . Cons u l t an t s , c oac hs , f o rma t eu rs
e t / o u M V P, nous a vons à c œur de pa r t ag e r
a vec la c om muna u t é un s a vo i r t ec h n i que e t
m é t h odo lo g i que , m a i s a u s s i n o s va l e u r s
150billets
de
blog
> 12j formati
on
30art.de
presse
7 MVP
7 MCT
Code/Developpement
Au cœur du Framework
4.5.1Michel PERFETTI
MVP ALM
Cellenza
buildmeimfamous.net
Bruno BOUCARD
MVP C++
blogs.msdn.com/devpara/
Code/developpement#mstechdays
.NET (Une vue *très* simplifiée)
Runtime Libraries Languages Tools .NET
Code/developpement#mstechdays
Contenu de .NET 4.5Client & Device
• Async – for UI responsiveness
• Windows Store apps -- WinRT
• Windows Phone apps
• .NET CF 3.9
Web & Cloud
• Async – for server scaling
• ASP.NET MVC4
• ASP.NET Web API
• ASP.NET Web Pages
• Entity Framework Code-First
• WebSockets
• SignalR
• Windows Azure Cloud Services 4.5 Support
• Windows Azure Web Sites
Fundamentals
• .NET Async(async + await)
• Many new async APIs
• WinRT interop
• Multi-core JIT
• MPGO – NGEN hot/cold splitting
• Performance improvements
• Reboot and reliability improvements to setup
• Support Windows RT
GC
• Background GC
• LOH heap balancing
• LOH fragmentation reduction
• GC low latency mode
• GC awareness of NUMA and >64 processors
• >2GB arrays (or objects)
Libraries
• Portable libraries update
• .NET Core Profile (Windows 8)
• Extension methods for WinRT streams and async
• NuGet
• Immutable collections
• Async for .NET 4
• HttpClient for Portable
.NET 4.5 est installé sur plus de 100+ million de machines!
Code/developpement#mstechdays
.NET 4.5.1 en trois axes
Productivité du développeur
Performance des applications
Innovations constantes
Code/developpement#mstechdays
Productivité du
développeur
Code/developpement#mstechdays
En 2005, il y avait une fonctionnalité
nommée «Edit & Continue», mais
quelque chose manquait…
Code/developpement#mstechdays
Code/developpement#mstechdays
• Fortement demandé par la communauté
• Fonctionne exactement comme pour les applications 32-
bits
• Projets client (WPF, WinForms, etc), Store et applications
web ASP.NET sont supportés
• Pour les projets d’application web activer «Edit &
Continue» dans les propriétés du projet
«Edit & Continue» pour 64-bits est là !
Code/developpement#mstechdays
Mais il y a mieux…
Code/developpement#mstechdays
Code/developpement#mstechdays
Inspection des valeurs de retour
de méthode• Maintenant disponible pour .NET !
• Accès par les fenêtres «Autos» et «Immediat» ($ReturnValue)
• Peut étendre les valeurs de retour dans le debugger
Code/developpement#mstechdays
Améliorations du débogage async• Question fréquente :
– Comment l’exécution arrive-t-elle ici ?
• Supporte les Store Apps, les Web Apps ainsi que les applications desktop sous Windows 8.1
• Amélioration des fenêtres «Call Stack» et Tasks
Code/developpement#mstechdays
Amélioration du développement
Windows Store• Support du «Edit & Continue» en 64-bits
• Support de l’inspection des valeurs de retour
• Amélioration du débogage des async
• Conversion de System.IO.Stream vers IRandomAccessStream
– Permet une bien meilleure intéropérabilité avec le code .NET existant
• Meilleurs support des exceptions provenant des APIs WinRT
– System.Exception.Message
– System.Exception.StackTrace
• Valeur de type Nullable dans les structs WinRT
Code/developpement#mstechdays
Conversion de Stream vers
IRandomAccessStream
Dans .NET 4.5.1 : System.IO.WindowsRuntimeStreamExtensions
.AsRandomAccessStream(Stream stream)
bitmap.SetSource(memoryStream); <-- error CS1503: Argument 1: cannot convert from 'System.IO.Stream' to 'Windows.Storage.Streams.IRandomAccessStream‘
bitmap.SetSource(memoryStream.AsRandomAccessStream()); <-- .NET 4.5.1
Des forums MSDN :
Code/developpement#mstechdays
• Sous Windows 8, la propagation des erreurs depuis les APIs WinRT se fait à
travers des HRESULT– Les informations importantes sur ces exceptions sont perdues, à moins qu’un débogueur soit attaché
• Sous Windows 8.1, des informations additionnelles sur l’erreur sont
disponibles grâce aux propriétés de System.Exception :– Message
– StackTrace
Support des exceptions APIs WinRT
Additional exception details from a C++ WinRTComponent
Code/developpement#mstechdays
• Fourni une connexion vers Azure DB fiable
• Restauration automatique de connexion rompue
• Fourni un grande expérience depuis des appareils connectés
• Ca fonctionne ! Aucune configuration ou modification de code autre que d’installer .NET 4.5.1
Résilience des connexions EF/ADO.NET
Code/developpement#mstechdays
ASYNC, $RETURNVALUE,
EDIT&CONTINUE, EF
Code/developpement#mstechdays
Performance des
applications
Code/developpement#mstechdays
• Ajoute la capacité de suspendre une
application via une machine à trois états
• Tous les sites débutent dans un état inactif
• Lorsque les sites sont réclamés, ils sont chargés en mémoire,
deviennent actifs, et de répondre aux requêtes clientes
• Les sites activés seront suspendus après un délai prédéfini
• Les sites suspendus perdent l'accès à la CPU, ce qui libère
des cycles CPU et de la mémoire pour les demandes vers
d'autres sites.
• ils sont maintenus dans le nouvel état suspendu
• ils peuvent être repris très rapidement et répondre à de
nouvelles requêtes très rapidement
Suspension des applications ASP.NET
Code/developpement#mstechdays
Suspension des applications ASP.NET
Résultats en provenance de chez Microsoft
• Permet faible latence, des sites Web de haute densité pour le cloud on-prem/private
• Livraison dans le cadre de IIS 8.5 dans Windows Server 2012 R2
Code/developpement#mstechdays
Dans les paramètres de IIS,
définissez délai d'inactivité
sur « suspend »
Suspension des applications ASP.NET
Plus information: ASP.NET App Suspend – responsive shared .NET web
hosting
• Il est long de compacter (= déplacer) des gros objets
Pour remédier à ce problème– Le GC alloue les objets considérés « gros » (>85Ko) dans un tas
spécifique appelé Large Object Heap (LOH).
– le LOH n’est pas compacté
• On gagne en temps dans le GC, mais la création d’un gros objet est
par contre beaucoup plus lente
• Le Framework .NET 4.5 apporte une amélioration de
30% de la vitesse d’allocation dans le LOH par
rapport au Framework 4.0
Rappel sur le Large Object Heap (LOH)
Code/developpement#mstechdays
• 2 méthodes d’utilisation de l’API du GC pour le LOH
1. Compactage du LOH directement (right away)
2. Compactage du LOH lors du traitement de la génération 2
GCSettings.LOHCompactionMode = GCLOHCompationMode.CompactOnce;
GC.Collect();
// Next full blocking GC happens at some point, it will be a compacting GC that compacts the whole heap including LOH.
GCSettings.LOHCompactionMode = GCLOHCompationMode.CompactOnce;
Compactage sur demande du LOH
Code/developpement#mstechdays
Rappel sur le compilateur Just-In-Time
Dém
arr
ag
e à
fro
id
• Les compilateurs .NET
• Transforment à la volée le code IL (résultat de la compilation de
source .NET) en code assembleur
• Compilation à la demande (just in time) et une seule fois par
fonction
• Cependant
• Certaines applications/services ont besoin de démarrer le plus
vite possible, et souffrent du temps de JIT
• Le Framework .NET 4.5 permet de JITTER en // les Apps du
Store et les applications/service .NET dont les assemblages sont
dans le GAC
Code/developpement#mstechdays
JIT multi-cœur pour sites web ASP.NET
Dém
arr
ag
e à
fro
id
• Minimise le temps
de démarrage sur
des processeurs
multi cœurs
• Désormais pris en
charge pour les
sites Web ASP.NET
• Activé par défaut
pour les applications
ASP.NET
Code/developpement#mstechdays
• Maintenir le Framework .NET pour plus d’un milliard de PC est un vrai gros soucis !
• Actuellement, mettre à jour le Framework .NET peut amener à une dégradation des performances d’une app juste après la mise à jour
• Cela est dû aux assemblages .NET de base qui son JITTER après la mise à jour
• Sous Windows 8.1, la performance des apps reste identique, même après la mise à jour du Framework .NET
• Le résultat est une meilleure expérience utilisateur, ainsi qu’une longévité supérieure des batteries des tablettes
Cohérence de performance avant et
après la mise à jour de .NET
Code/developpement#mstechdays
• Le GarbageCollector de .NET est une machine bien huilée
• En principe, GC.Collect() ne devrait jamais être appelé
• ATTENTION : Les grands pouvoirs impliquent de grandes responsabilités !
Compactage sur demande du LOH
Code/developpement#mstechdays
• Avec .NET 4.5.1, il est
maintenant possible de le
compacter afin de réduire
la fragmentation du tas
• La configuration du LOH
fait partie de GCSettings
public static class GCSettings {
public static GCLOHCompactionMode LOHCompactionMode { get; set; }
}
Compactage sur demande du LOH
Code/developpement#mstechdays
COMPACTAGE SUR DEMANDE
DU LOH
Code/developpement#mstechdays
Innovation
continue
Code/developpement#mstechdays
• L’objectif est de garder les valeurs existantes du Framework .NET tout en permettant plus d’agilité et d’innovation
• Valeurs existantes :– Facilité d’accès
– Qualité connue, maturité et niveau de compatibilité
– Une seule politique de licence et de support
– Patching centralisé pour les problèmes de sécurité
• Les nouvelles valeurs :– Cycle de release plus rapide avec un retour d’expérience client plus proche
– Moins de friction lors d’utilisation des fonctionnalités de .NET sur plusieurs plateformes
Mise à jour du Framework .NET
Code/developpement#mstechdays
• Lors de la release de .NET 4.5, deux composants ont étés délivrés par NuGet :– MEF (Microsoft Composition) pour les apps web et Windows Store
– TPL Dataflow (Microsoft.Tpl.Dataflow)
– Ces éléments sont traités comme n’importe quel autre composant de .NET 4.5 (support complet)
Release NuGet
.NET (“in box”)
System
Composition
TPL
DataflowHttp Client Async
Immutable
Collections
Code/developpement#mstechdays
• Accès unique
pour tous les
packages NuGet
du framework
.NET livrés par
Microsoft– Dans Visual Studio 2010,
2012 et 2013
– Sur le web
Flux NuGet pour le Framework .NET
Code/developpement#mstechdays
• Déjà activé dans Visual Studio 2013
• Sous Visual Studio 2010 et 2012
• Tools.Options.Package Manager
• Nom: .NET Framework Packages
• Source: https://nuget.org/api/v2/curated-feeds/dotnetframework
Flux NuGet pour le Framework .NET
Code/developpement#mstechdays
Architecture Interne (ImmutableList)
var list1 = ImmutableList.Create(1);
// list 1 = { 1 }
1
null null
Créer une liste immutable
1
2
var list2 = list1.Add(2);
// list 1 = { 1 }
// list2 = { 1, 2 }
null null
null
Ajouter
3
1
2
var list3 = list2.Insert(0, 3);
// list1 = { 1 }
// list2 = { 1, 2 }
// list 3= { 3, 1, 2 }
null null null
Insérer
Code/developpement#mstechdays
• Ajouter des items– Les collections immutables consomment un peu plus de
mémoire par élément de stockage que leurs homologues
mutables
– La consommation réelle de mémoire entre un type mutable
et type immutable peut varier en fonction de la façon dont
les instances sont utilisées
• Retirer des items– Les collections mutables ne rétrécissent pas leurs tableaux
de sorte que vous n'avez pas à récupérer cette mémoire
– Les collections immuables rétrécissent immédiatement
leurs arbres binaires pour chaque élément supprimé
• Cette mémoire libre est candidate pour la collecte du
GC
Performances
Code/developpement#mstechdays
• Scénario de multithreading– Mais pas forcement massivement concurrent
• Les collections de System.Collections.Concurrent sont là pour ça !
• Pratique – Vous voulez extraire des instantanés des vos collections
• Vous souhaitez les lire dans un contexte thread-safe, alors que la collection originale peut continuer à être modifiée
• Rappel– Les collections immutables sont généralement rapides à lire, mais
relativement coûteuses à mettre à jour
Conseils d’utilisation
Code/developpement#mstechdays
LE PACKAGE
IMMUTABLE
COLLECTIONS EN ACTION
Code/developpement#mstechdays
Synthèse du Framework .NET 4.5.1
• 64-bit Edit and Continue
• Method Return Value
Inspection
• Async Debugging
Enhancements
• Windows Store
development
improvements
• EF/ADO.NET
Connection Resiliency
• ASP.NET application
suspension
• Multi-core JIT
improvements
• On-demand large-object
heap compaction
• Consistent performance
before and after servicing
the .NET Framework
NET Framework
updates
• NuGet releases
• Curated .NET
Framework NuGet
packages
Innovation continuePerformance des applications Productivité du développeur
Code/developpement#mstechdays
De nombreux moyens de communication
@dotnetdotnet
Blog
UserVoiceMSDN Forums
Code/developpement#mstechdays
Depuis votre smartphone sur :
http://notes.mstechdays.fr
De nombreux lots à gagner toute les heures !!!
Claviers, souris et jeux Microsoft…
Merci de nous aider à améliorer les Techdays !
Donnez votre avis !
Présentation de Cellenza
Vous pouvez vous i nsc r i re à
no t re j eu concours su r no t re
s tand ou en l i gne :
h t tp : / / j eu -
concours .ce l lenza .com
Venez nous retrouver sur notre Stand #15
Merci !
Digital is
business