370 likes | 611 Views
What’s New in .NET Development. Habib Heydarian (habibh@microsoft.com) Program Manager, .NET 2-303 : What’s New in .NET Development. .NET (A *Very* Simplified View). First, a look at .NET 4.5. .NET 4.5 is installed on 100+ million machines!. .NET 4.5.1 in A Nutshell.
E N D
What’s New in .NET Development Habib Heydarian (habibh@microsoft.com) Program Manager, .NET 2-303: What’s New in .NET Development
First, a look at .NET 4.5 .NET 4.5 is installed on 100+ million machines!
.NET 4.5.1 in A Nutshell Developer Productivity Application Performance Continuous Innovation
In 2005, we introduced a *little* feature called Edit & Continue, but there was something missing….
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
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 • Nullablevalue types in WinRTstructs • 64-bit Edit and Continue support • Managed Return Value Inspection support • Async debugging enhancedments
Convert Stream to IRandomAccessStream • From MSDN Forums… // EXAMPLE: Get image from URL var client = new HttpClient(); var stream = await client.GetStreamAsync(imgUrl); varmemoryStream = new MemoryStream(); await stream.CopyToAsync(memoryStream); var bitmap = new BitmapImage(); 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 Nullablevalue types in WinRTstructs // Define the "titleAuthor" table of the Microsoft "pubs" database. public structtitleAuthor { // Author ID; format ###-##-#### public string au_id; // Title ID; format AA#### public string title_id; // Author ORD is nullable. public short? au_ord; // Royalty Percent is nullable. public int? royaltyper; } <-- error WME1060: 'System.Nullable<System.Int16>' is not a valid Windows Runtime field type. <-- error WME1060: 'System.Nullable<System.Int32>' is not a valid Windows Runtime field type.
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
ASP.NET App Suspension • Enables low latency, high density web sites for on-prem/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
On-demand Large Object Heap Compaction • Let me start off by saying that the .NET GC is one well-tuned machine! • In general, you should never have to use GC.Collect() • CAUTION: With great power comes great responsibility!
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 GCLOHCompactionModeLOHCompactionMode { get; set; } }
On-demand Large Object Heap Compaction • Two ways to use GC LOH API: • Compact LOH right away • Compact LOH with the next full blocking GC 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;
On-demand Large Object Heap Compaction • I’m going to wrap up by saying… • If you really believe you have a GC heap fragmentation issue (a.k.a. GynormousGC Fragmentossyndrome), please email: • MaoniS@microsoft.com (our resident GC ninja)
Multi-Core JIT Improvements 15% improvement for cold startup • Minimize application startup time on multi-core CPUs • Now supported for ASP.NET web sites • Enabled automatically for ASP.NET apps 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 JIT-compiled 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
.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 we released two components 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 Async Immutable Collections .NET (“in box”)
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 • In VS 20[10,12]: • Tools.Options.Package Manager • Name: .NET Framework Packages • Source: https://nuget.org/api/v2/curated-feeds/dotnetframework/ Visual Studio 20[10,12]
What’s New in .NET Development Developer Productivity Application Performance Continuous Innovation • 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 .NET 4.5.1 delivers many new innovations while maintaining a high compatibility bar
We would love to hear from you! Blog E-mail @dotnet dotnet MSDN Forums UserVoice
Whether you loved it or hated it, please complete the evaluation 2-303: What’s New in .NET Development