| Basel .NET 4.5.1, what’s up Doc? Jose Luis Latorre Millás Software Engineer Roche Diagnostics .NET 4.5.1 Developer Productivity Application Performance Continuous Innovation Conclusion 10’ 20’ 10’ 15’ 5’ Agenda | Basel Chapter 1/5 .NET 4.5.1 Quick Reminder – What Is .NET Entity Framework ASP. NET Base Class Libraries JIT & NGEN Garbage Collector WCF WPF Win Forms The CLR Security Model Work Flow And more! Profiling& Debugging APIs Exception Handling Loader & Binder .NET (A *Very* Simplified View) Runtime Libraries Languages Tools .NET .NET Evolution C# 4.0 + VB 10.0 C# 3.0 + VB 9.0 .NET 4.5.1 C# + VB 4.5 Asynchronous Programming Dynamic + Language Parity Language Integrated Query C# 2.0 + VB 8.0 Generics C# 1.0 + VB 7.0 3.5 Managed Code 3.0 4.5 .NET 1.0 .NET 1.1 .NET 2.0 .NET 4.0 2002 2003 2005-08 2010 - Win8 First, a look at .NET 4.5 Client & Device • Async – for UI responsiveness • Windows Store apps -- WinRT • Windows Phone apps • .NET CF 3.9 Web & Cloud Fundamentals • 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 GC • Background GC • LOH heap balancing • LOH fragmentation reduction • GC low latency mode • GC awareness of NUMA and >64 processors • >2GB arrays (or objects) .NET 4.5 is installed on 100+ million machines! 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.1 in A Nutshell | Basel Chapter 2/5 Developer Productivity In 2005, a *little* feature called Edit & Continue was introduced, but there was something missing…. We have been waiting for 8 years… 64-bit Edit and Continue is finally here! Number 9 all time requested feature on UserVoice! Works exactly the same as for 32-bit applications Client (WPF, WinForms, etc.), Store and ASP.NET WAP projects are supported • For WAP projects, need to enable Edit & Continue in Project Properties • • • Wait, there is more… Method Return Value Inspection Now available for .NET! Access via Autos window or in the Immediate window ($ReturnValue) Can expand return value in the debugger Async Debugging Improvements Common question: How did I get here? Supported for Store Apps, Web apps, Desktop apps in W8.1 Enhancements to the Call Stack and Tasks window Visual Studio 2012 Windows Store Development Improvements Convert System.IO.Stream to IRandomAccessStream Allows much easier interop with existing .NET code Better exception support for WinRT APIs System.Exception.Message System.Exception.StackTrace WinRT type system enhancements Nullable value types in WinRT structs 64-bit Edit and Continue support Managed Return Value Inspection support Async debugging enhancedments Convert Stream to IRandomAccessStream From MSDN Forums… 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 In .NET 4.5.1: System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream(Stream stream) Rich exception interop support for WinRT APIs In Windows 8, error propagation for WinRT APIs is through HRESULT Important Exception information is lost unless a debugger is attached In Windows 8.1, additional error information is available via System.Exception properties: Message StackTrace Additional exception details from a C++ WinRT Component WinRT Type System Enhancements Support Nullable value types in WinRT structs <-- error WME1060: 'System.Nullable<System.Int16>' is not a valid Windows Runtime field type. public short? au_ord; <-- error WME1060: 'System.Nullable<System.Int32>' is not a valid Windows Runtime field type. public int? royaltyper; EF/ADO.NET Connection Resiliency Provide reliable connection to Azure DB Automatically retry/reconnect broken connection Provides great experience for connected devices It Just Works! No code or configuration changes other than installing .NET 4.5.1 | Basel Chapter 3/5 Application Performance ASP.NET App Suspension Enables low latency, high density web sites for onprem/private cloud Shipping as part of IIS 8.5 in Windows Server 2012 R2 Preview Provisioned through the Idle Worker Process Page-out capability in IIS Early Results from our Performance Lab ASP.NET App Suspension In IIS Settings, set Idle Time-out Action to Suspended ASP.NET App Suspension On-demand Large Object Heap Compaction .NET GC is quite well-tuned In general, we should never have to use GC.Collect() CAUTION: With great power comes great responsibility! "Out of CPU, memory and disk, memory is typically the most important for overall system performance." Mark Russinovich On-demand Large Object Heap Compaction Refresher Large objects (>85000 bytes) treated specially Very expensive to compact Collected with Gen 2 In .NET 4.5.1, you can now compact the Large Object Heap (LOH) to address heap fragmentation The LOH mode is part of GCSettings: public static class GCSettings { public static GCLOHCompactionMode LOHCompactionMode { get; set; } } On-demand Large Object Heap Compaction Two ways to use GC LOH API: 1. Compact LOH right away 2. Compact LOH with the next full blocking GC // Next full blocking GC happens at some point, it will be a compacting GC that compacts the whole heap including LOH. Multi-Core JIT Improvements • Minimize application startup time on multicore CPUs • Now supported for ASP.NET web sites • Enabled automatically for ASP.NET apps 15% improvement for cold startup Performance data from our test labs Consistent Performance Before & After Servicing .NET Servicing .NET Framework for 1B+ PCs is a very BIG deal! Today, servicing the .NET Framework can lead to degradation in app performance directly afterwards This is due to core .NET assemblies being JITcompiled for a period of time after servicing In Windows 8.1, app performance remains consistent even after servicing the .NET Framework Results in much better user experience and better battery life on tablets Windows 8.1 Performance improvements • Defer loading of resources • Optimized XAML paths • Precompiled XAML in XBF (XAML Binary Format) • ListView & GridView Startup | Basel Chapter 4/5 Continuous Innovation .NET Framework Updates Our goal is to keep the existing values of the .NET Framework while allowing for more agility and innovation Existing Values • • • • Great discoverability (all in in place) Known quality, maturity and compatibility level A single license and support policy Centralized patching for security issues *PLUS* New Values • • Faster release cadence with a tighter customer feedback loop Less friction with using features across .NET platforms NuGet Releases During .NET 4.5 two components were released via NuGet: • MEF (Microsoft.Composition) for web and Windows Store apps • TPL Dataflow (Microsoft.Tpl.Dataflow) • These (and new packages) are treated as any other .NET 4.5 component, i.e. are fully supported System Composition TPL Dataflow Http Client .NET (“in box”) Async Immutable Collections Announcing: .NET Framework NuGet Feed One-stop shopping for all of your .NET Framework NuGet packages released by Microsoft • In Visual Studio 20[10,12,13] • On the Web .NET Framework NuGet Feed • Already enabled in VS 2013 Preview Visual Studio 20[10,12] • In VS 20[10,12]: • Tools.Options.Package Manager • Name: .NET Framework Packages • Source: https://nuget.org/api/v2/curated-feeds/dotnetframework/ PCL (Portable Class Library) on all platforms • Not only windows.. • Opens path to third parties like Mono/Xamarin to produce portable libraries that can be used anywhere .NET or Mono is supported (Mac, Linux..) | Basel Chapter 5/5 Conclusion What’s New in .NET Development Jose Luis Latorre Email: joslat@gmail.com Twitter: @joslat Blog: http://xamlguy.com