45

Au coeur du framework .net 4.5.1

Embed Size (px)

Citation preview

Page 1: Au coeur du framework .net 4.5.1
Page 2: Au coeur du framework .net 4.5.1

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

Page 3: Au coeur du framework .net 4.5.1

Code/Developpement

Au cœur du Framework

4.5.1Michel PERFETTI

MVP ALM

Cellenza

buildmeimfamous.net

Bruno BOUCARD

MVP C++

blogs.msdn.com/devpara/

Page 4: Au coeur du framework .net 4.5.1

Code/developpement#mstechdays

.NET (Une vue *très* simplifiée)

Runtime Libraries Languages Tools .NET

Page 5: Au coeur du framework .net 4.5.1

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!

Page 6: Au coeur du framework .net 4.5.1

Code/developpement#mstechdays

.NET 4.5.1 en trois axes

Productivité du développeur

Performance des applications

Innovations constantes

Page 7: Au coeur du framework .net 4.5.1

Code/developpement#mstechdays

Productivité du

développeur

Page 8: Au coeur du framework .net 4.5.1

Code/developpement#mstechdays

En 2005, il y avait une fonctionnalité

nommée «Edit & Continue», mais

quelque chose manquait…

Page 9: Au coeur du framework .net 4.5.1

Code/developpement#mstechdays

Page 10: Au coeur du framework .net 4.5.1

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à !

Page 11: Au coeur du framework .net 4.5.1

Code/developpement#mstechdays

Mais il y a mieux…

Page 12: Au coeur du framework .net 4.5.1

Code/developpement#mstechdays

Page 13: Au coeur du framework .net 4.5.1

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

Page 14: Au coeur du framework .net 4.5.1

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

Page 15: Au coeur du framework .net 4.5.1

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

Page 16: Au coeur du framework .net 4.5.1

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 :

Page 17: Au coeur du framework .net 4.5.1

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

Page 18: Au coeur du framework .net 4.5.1

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

Page 19: Au coeur du framework .net 4.5.1

Code/developpement#mstechdays

ASYNC, $RETURNVALUE,

EDIT&CONTINUE, EF

Page 20: Au coeur du framework .net 4.5.1

Code/developpement#mstechdays

Performance des

applications

Page 21: Au coeur du framework .net 4.5.1

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

Page 22: Au coeur du framework .net 4.5.1

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

Page 23: Au coeur du framework .net 4.5.1

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

Page 24: Au coeur du framework .net 4.5.1

• 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)

Page 25: Au coeur du framework .net 4.5.1

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

Page 26: Au coeur du framework .net 4.5.1

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

Page 27: Au coeur du framework .net 4.5.1

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

Page 28: Au coeur du framework .net 4.5.1

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

Page 29: Au coeur du framework .net 4.5.1

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

Page 30: Au coeur du framework .net 4.5.1

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

Page 31: Au coeur du framework .net 4.5.1

Code/developpement#mstechdays

COMPACTAGE SUR DEMANDE

DU LOH

Page 32: Au coeur du framework .net 4.5.1

Code/developpement#mstechdays

Innovation

continue

Page 33: Au coeur du framework .net 4.5.1

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

Page 34: Au coeur du framework .net 4.5.1

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

Page 35: Au coeur du framework .net 4.5.1

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

Page 36: Au coeur du framework .net 4.5.1

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

Page 37: Au coeur du framework .net 4.5.1

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

Page 38: Au coeur du framework .net 4.5.1

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

Page 39: Au coeur du framework .net 4.5.1

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

Page 40: Au coeur du framework .net 4.5.1

Code/developpement#mstechdays

LE PACKAGE

IMMUTABLE

COLLECTIONS EN ACTION

Page 41: Au coeur du framework .net 4.5.1

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

Page 43: Au coeur du framework .net 4.5.1

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 !

Page 44: Au coeur du framework .net 4.5.1

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 !

Page 45: Au coeur du framework .net 4.5.1

Digital is

business