30

Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy
Page 2: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

Neues vom .net Framework 4.5

Patric Boscolo, Developer Evangelist, [email protected], http://blogs.msdn.com/patricb, @patricsmsdn

Page 3: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy
Page 4: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy
Page 5: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy
Page 6: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

Quick Reminder .net Framework Principles

Page 7: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

Profile for Metro Style Apps

Page 8: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

What else? Let‘s talk about the how

Page 9: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

Windows Runtime Types

Managed Types

Mapped Types

Interop Helpers 99% of Windows* namespace

Tuple, List<T>, XDocument, DataContract, etc.

Int32, String, Boolean, IEnumerable<T>, IList<T>, Uri, etc.

IBuffer / Byte[] IAsync* / Task* InputStream, OutputStream, …

Page 10: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

using Windows.Storage; using System; using System.IO; using System.Threading.Tasks; class Sample { static async Task WriteAsync(StorageFolder wrtfolder, string filename, string text) { var wrtFile = await wrtFolder.CreateFileAsync(filename); var wrtStream = await wrtFile.OpenAsync(FileAccessMode.ReadWrite); using (Stream stream = wrtStream.OpenWrite()) { using (var writer = new StreamWriter(stream)) { writer.WriteLine(text); } } } }

native type native method

managed type returned from a

seemingly native method

managed argument passed

to native API

native namespace

C# feature

Page 11: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

AWESOME WINDWOS 8 WINDOWS RT .net for Metro Style

Apps

Page 12: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

.net Profile for Metro Style Apps

Page 13: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

Design Requirements

• Remove APIs not applicable to Metro style apps • e.g. Console, ASP.NET

• Remove dangerous, obsolete, and legacy APIs • Remove duplication (within .NET APIs and with WRT APIs)

• e.g. ArrayList (with List<T>) and XML DOM (with WR XML API)

• Remove APIs that are OS API wrappers • e.g. EventLog, Performance Counters

• Remove badly designed APIs • e.g. APIs that are confusing, don’t follow basic design guidelines, cause bad dependencies

Page 14: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

Compatibility Requirements• Running existing .NET applications as-is on the .NET profile for

Metro style apps is not an objective

• Porting existing C# and VB code to the profile should be easy

• Existing .NET developers should feel at home with this profile

• Code compiled to the profile must be able to execute on .NET Framework 4.5

• Code compiled to the portable subset needs to be compatible with this profile

Page 15: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

* Refers to implementation assemblies, not reference assemblies. More on this later.

Page 16: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

.NET for Metro style apps

BCL

HTTP

XML

Serialization

WCF

MEF

Page 17: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

Main Namespaces

System System.Collections* System.ComponentModel System.ComponentModel.Composition* System.Diagnostics* System.Dynamic System.Globalization System.IO System.Linq* System.Net* System.Reflection System.Runtime.InteropServices* System.Runtime.Serialization* System.ServiceModel* System.Text* System.Threading System.Threading.Tasks System.Xml.* System.Xml.Linq

Page 18: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

System Namespace* Simplicity Action Action<...> Activator Array ArraySegment<T> AsyncCallback Attribute AttributeTargets AttributeUsageAttribute BitConverter Boolean Byte Char CLSCompliantAttribute Convert DateTime DateTimeKind DateTimeOffset DayOfWeek Decimal Delegate Double Enum Environment EventArgs EventHandler EventHandler<T> Exception FlagsAttribute Func<...>

GC Guid IAsyncResult IComparable<T> ICustomFormatter IDisposable IEquatable<T> IFormatProvider IFormattable Int16 Int32 Int64 IntPtr IObservable<T> IObserver<T> Lazy<T> Math MidpointRounding MulticastDelegate Nullable Nullable<T> Object ObsoleteAttribute ParamArrayAttribute Predicate<T> Random RuntimeArgumentHandle RuntimeFieldHandle RuntimeMethodHandle RuntimeTypeHandle

SByte Single String StringComparer StringComparison StringSplitOptions ThreadStaticAttribute TimeSpan TimeZoneInfo Tuple Tuple<...> Type TypedReference UInt16 UInt32 UInt64 UIntPtr Uri UriBuilder UriComponents UriFormat UriKind ValueType Version Void WeakReference WeakReference<T>

* excluding exceptions

Page 19: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

Removed, Replaced, and Changed

• System.Web

• System.Data

• System.Runtime.Remoting

• System.Reflection.Emit

• Private reflection

• Application Domains

Page 20: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

Removed, Replaced, and Changed

Existing Technology New Substitute

System.Windows Windows.UI.Xaml

System.Security.IsolatedStorage Windows.Storage.ApplicationData

System.Resources Windows.ApplicationModel.Resources

System.Net.Sockets Windows.Networking.Sockets

System.Net.WebClient Windows.Networking.BackgroundTransfer and System.Net.HttpClient

Page 21: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

Existing Technology Changes

Serialization • Use Data Contract for general serialization needs • Use XML serialization for fine control of the XML

stream

Reflection • System.Type now represents a type reference • System.Reflection.TypeInfo is the new System.Type

XML • XML Linq is the main XML parser • Use XmlReader/Writer as a low level abstraction

Collections • Non generic collections gone • New collection abstractions added: IReadOnlyList<T>

Threading • Synchronization primitives mainly unchanged • Thread control in Windows.Foundation.Threading • Task.Run is the new high level way of doing

background processing

Async Model • !!!!

Removed, Replaced, and Changed

Page 22: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

Porting Guide: Example Topic Reflection System.Type has become a type reference and only contains basic information. The majority of the reflection API's are now on System.Reflection.TypeInfo. You can get a TypeInfo from a Type by using the GetTypeInfo() extension method when you include a using statement for the System.Reflection namespace.

Existing .NET Code Replacement Code Notes type.Assembly type.GetTypeInfo().Assembly

type.GetMethods(BindingFlags.DeclaredOnly) type.GetTypeInfo().DeclaredMethods

type.GetMethod("MethodName", BindingFlags.DeclaredOnly)

type.GetTypeInfo().GetDeclaredMethod("MethodName")

These samples are the same for Properties, Events, and Fields.

type.GetMethod("MethodName") type.GetRuntimeMethod("MethodName") GetRuntimeMethod API in Beta.

type.GetMethods() type.GetRuntimeMethods() GetRuntimeMethods() API in Beta. type.GetMethods(BindingFlags.Instance|BindingFlags.Public)

type.GetRuntimeMethods().Where(m => !m.IsStatic && m.IsPublic)

GetRuntimeMethods() API in Beta.

BindingFlags.NonPublic !member.IsPublic You can also use member.IsAssembly => internal or member.IsFamily => protected for more flexibility

Page 23: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

ASYNC

Page 24: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

.net 4.5 & Visual Studio 11

Parallel Pattern Library Task Parallel Library

PLINQ

Managed Native Key:

Windows Operating System

Runtime

Programming Models

CLR ThreadPool

Task Scheduler

Resource Manager

Data Stru

ctures D

ata

Stru

ctu

res

Tools

Tooling

Parallel Debugger

Concurrency Visualizer

Async Agents Library

Stacks

Tasks

Watch

CPU

Threads

Cores

C#/VB/F#

Async Dataflow C++ AMP

DirectX

GPU

CPU GPU

ConcRT

Task Scheduler

Resource Manager

New Updated

Page 25: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

Async Implementation

Task Representation as Feature in .net and Languages • Produce and Consume Async Operations

When you write a Async Method • You Producing a Task<T> or Results Task<T>

When you use Await • You await Task<T> or Results Task<T>

Page 26: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

We all “know” sync methods are “cheap” – Years of optimizations around sync methods – Enables refactoring at will

Mental Model

public static void SimpleBody() { Console.WriteLine("Hello, Async World!"); }

.method public hidebysig static void SimpleBody() cil managed { .maxstack 8 L_0000: ldstr "Hello, Async World!" L_0005: call void [mscorlib]System.Console::WriteLine(string) L_000a: ret }

Page 27: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

Not so for asynchronous methods

Mental Model, cont.

public static async Task SimpleBody() { Console.WriteLine("Hello, Async World!"); }

.method public hidebysig static class [mscorlib]System.Threading.Tasks.Task SimpleBody() cil managed { .custom instance void [mscorlib]System.Diagnostics.DebuggerStepThroughAttribute::.ctor() = ( 01 00 00 00 ) // Code size 32 (0x20) .maxstack 2 .locals init ([0] valuetype Program/'<SimpleBody>d__0' V_0) IL_0000: ldloca.s V_0 IL_0002: call valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder::Create() IL_0007: stfld valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder Program/'<SimpleBody>d__0'::'<>t__builder' IL_000c: ldloca.s V_0 IL_000e: call instance void Program/'<SimpleBody>d__0'::MoveNext() IL_0013: ldloca.s V_0 IL_0015: ldflda valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder Program/'<SimpleBody>d__0'::'<>t__builder' IL_001a: call instance class [mscorlib]System.Threading.Tasks.Task [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder::get_Task() IL_001f: ret }

.method public hidebysig instance void MoveNext() cil managed { // Code size 66 (0x42) .maxstack 2 .locals init ([0] bool '<>t__doFinallyBodies', [1] class [mscorlib]System.Exception '<>t__ex') .try { IL_0000: ldc.i4.1 IL_0001: stloc.0 IL_0002: ldarg.0 IL_0003: ldfld int32 Program/'<SimpleBody>d__0'::'<>1__state' IL_0008: ldc.i4.m1 IL_0009: bne.un.s IL_000d IL_000b: leave.s IL_0041 IL_000d: ldstr "Hello, Async World!" IL_0012: call void [mscorlib]System.Console::WriteLine(string) IL_0017: leave.s IL_002f } catch [mscorlib]System.Exception { IL_0019: stloc.1 IL_001a: ldarg.0 IL_001b: ldc.i4.m1 IL_001c: stfld int32 Program/'<SimpleBody>d__0'::'<>1__state' IL_0021: ldarg.0 IL_0022: ldflda valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder Program/'<SimpleBody>d__0'::'<>t__builder' IL_0027: ldloc.1 IL_0028: call instance void [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder::SetException( class [mscorlib]System.Exception) IL_002d: leave.s IL_0041 } IL_002f: ldarg.0 IL_0030: ldc.i4.m1 IL_0031: stfld int32 Program/'<SimpleBody>d__0'::'<>1__state' IL_0036: ldarg.0 IL_0037: ldflda valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder Program/'<SimpleBody>d__0'::'<>t__builder' IL_003c: call instance void [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder::SetResult() IL_0041: ret }

Page 28: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

Garbage Collection

Page 29: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

Managed Profile Guided Optimization (for .net Applications)

Page 30: Neues vom .net Framework 4 - download.microsoft.comdownload.microsoft.com/.../CeBIT2012_NeuesVomNETFramework4.5.pdf•Porting existing C# and VB code to the profile should be easy

More Information [email protected]

Twitter: @patricsmsdn

Blog: http://blogs.msdn.com/patricb

Search for:

ASYNC -> Stephen Toub

.GC -> Pracheeti Nagarkar

MPGO -> Mark Miller

.net -> BCL Team Blog & Krzysztof Cwalina, Immo Landwerth and Joshua Goodman