Dans cette session vous découvrirez comment le couple Visual Studio 2013 et le Framework 4.5.1 augmentent votre productivité ainsi que les performances de vos applications .NET. Dans la lignée du Framework 4.5, cette dernière version offre son lot d’améliorations, parfaitement stabilisées au rythme des versions de Visual Studio. Cependant, Microsoft a décidé de livrer des packages officiels à un rythme plus rapide et plus fréquent que les versions majeures de Visual Studio. La dernière version de NuGet intégrée à Visual Studio 2013 permet de trouver plus facilement le type de package recherché. Ne manquez pas cette session et venez découvrir l’essentielle des nouveautés apportées par Visual Studio 2013 et le Framework 4.5.1.
Speakers : Michel Perfetti (Cellenza), Bruno Boucard (Cellenza)
2. Au cœur du Framework
4.5.1
Bruno BOUCARD
MVP C++
Cellenza
blogs.msdn.com/devpara/
Code/Developpement
Michel PERFETTI
MVP ALM
Cellenza
buildmeimfamous.net
3. Présentation de Cellenza
Cabinet de conseil IT exclusivement dédié
aux technologies Microsoft et aux méthodes
Agiles
Notre passion, les technologies MS
Nous sommes des experts Microsoft, agilistes
par
nature,
passionnés
par
notre
métier.
Consultants, coachs, formateurs et/ou MVP,
nous avons à cœur de partager avec la
communauté
un
savoir
technique
et
méthodologique, mais aussi nos valeurs
150
billets
de
blog
Comment nous le
faisons :
•
•
•
Formation continue
Partage de connaissance
Partenariats
> 12j
formati
on
7 MVP
7 MCT
30
art.
de
presse
5. Contenu de .NET 4.5
Client & Device
Web & Cloud
Fundamentals
GC
Libraries
• Async – for UI
responsiveness
• Windows Store
apps -- WinRT
• Windows Phone
apps
• .NET CF 3.9
• 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
• .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
• Background GC
• LOH heap
balancing
• LOH
fragmentation
reduction
• GC low latency
mode
• GC awareness
of NUMA and
>64 processors
• >2GB arrays (or
objects)
• 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!
#mstechdays
Code/developpement
6. .NET 4.5.1 en trois axes
Productivité du développeur
Performance des applications
Innovations constantes
#mstechdays
Code/developpement
10. «Edit & Continue» pour 64-bits est là !
•
•
•
•
Fortement demandé par la communauté
Fonctionne exactement comme pour les applications 32bits
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
#mstechdays
Code/developpement
11. Mais il y a mieux…
#mstechdays
Code/developpement
13. 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
#mstechdays
Code/developpement
14. 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
#mstechdays
Code/developpement
15. Résilience des connexions EF/ADO.NET
•
•
•
•
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
#mstechdays
Code/developpement
17. Et du côté de Windows Store …
#mstechdays
Code/developpement
18. Conversion de Stream vers
IRandomAccessStream
Des forums MSDN :
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
Dans .NET 4.5.1 : System.IO.WindowsRuntimeStreamExtensions
.AsRandomAccessStream(Stream stream)
#mstechdays
Code/developpement
19. Support des exceptions APIs WinRT
•
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
Additional exception details
from a C++ WinRT
Component
#mstechdays
Code/developpement
21. Suspension des applications ASP.NET
•
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
•
#mstechdays
Code/developpement
22. Suspension des applications ASP.NET
• Permet faible
latence, des sites
Web de haute
densité pour le
cloud onprem/private
• Livraison dans le
cadre de IIS 8.5
dans Windows
Server 2012 R2
#mstechdays
Résultats en provenance de chez Microsoft
Code/developpement
23. Suspension des applications ASP.NET
Dans les paramètres de IIS,
définissez délai d'inactivité
sur « suspend »
Plus information: ASP.NET App Suspend – responsive shared .NET web
hosting
#mstechdays
Code/developpement
24. Rappel sur le compilateur Just-In-Time
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
•
•
#mstechdays
Démarrage à froid
•
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
25. •
•
•
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
#mstechdays
Démarrage à froid
JIT multi-cœur pour sites web ASP.NET
Code/developpement
26. Cohérence de performance avant et
après la mise à jour de .NET
•
•
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
•
#mstechdays
Maintenir le Framework .NET pour plus d’un milliard
de PC est un vrai gros soucis !
Le résultat est une meilleure expérience utilisateur,
ainsi qu’une longévité supérieure des batteries des
tablettes
Code/developpement
27. Rappel sur le Large Object Heap (LOH)
• 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
28. Compactage sur demande du LOH
• 2 méthodes d’utilisation de l’API du GC pour le LOH
1. Compactage du LOH directement (right away)
GCSettings.LOHCompactionMode = GCLOHCompationMode.CompactOnce;
GC.Collect();
2. Compactage du LOH lors du traitement de la génération 2
// 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;
#mstechdays
Code/developpement
29. Compactage sur demande du LOH
• Le Garbage
Collector 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 !
#mstechdays
Code/developpement
30. Compactage sur demande du LOH
• 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; }
}
#mstechdays
Code/developpement
31. COMPACTAGE SUR
DEMANDE
DUFragmentation =
LOH
Fragmentation: 0% - Signifie que toute la mémoire libre est dans un seul grand bloc
Fragmentation: 90% - Lorsque il y a 100 Mo de mémoire libre est disponible,
mais plus grand bloc de mémoire libre pour une nouvelle allocation est seulement 10 MB
#mstechdays
Code/developpement
33. Mise à jour du Framework .NET
• 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
#mstechdays
Code/developpement
plusieurs plateformes
34. Release NuGet
• 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)
System
Composition
TPL
Dataflow
Http Client
.NET (“in box”)
#mstechdays
Code/developpement
PCL
Immutable
Collections
35. Flux NuGet pour le Framework .NET
• Accès unique
pour tous les
packages NuGet
du framework
.NET livrés par
Microsoft
–
–
#mstechdays
Dans Visual Studio 2010,
2012 et 2013
Sur le web
Code/developpement
36. Flux NuGet pour le Framework .NET
• 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
#mstechdays
Code/developpement
39. Performances
• 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
–
–
#mstechdays
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
Code/developpement
40. Conseils d’utilisation
• 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
#mstechdays
Code/developpement
41. Synthèse du Framework .NET 4.5.1
Performance des applications Productivité du développeur
•
64-bit Edit and Continue •
•
Method Return Value
Inspection
•
•
•
#mstechdays
Async Debugging
Enhancements
Windows Store
development
improvements
EF/ADO.NET
Connection Resiliency
•
Innovation continue
ASP.NET application
suspension
Multi-core JIT
improvements
•
On-demand large-object
heap compaction
•
Consistent performance
before and after servicing
the .NET Framework
Code/developpement
NET Framework
updates
•
NuGet releases
•
Curated .NET
Framework NuGet
packages
42. De nombreux moyens de communication
E-mail
dotnet
Blog
#mstechdays
MSDN Forums
Code/developpement
@dotnet
UserVoice
43. Donnez votre avis !
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 !
#mstechdays
Code/developpement
44. Présentation de Cellenza
Ve n e z n o u s r e t r o u ve r s u r n o t r e St a n d # 1 5
Vous pouvez vous inscrire à
notre jeu concours sur notre
stand ou en ligne :
http://jeuconcours.cellenza.com
Merci !