Updates for VS2015 & .NET 4.6

With Visual Studio 2015, Microsoft finally provides a free Community edition that’s both reasonably feature-complete and legal to use for any purpose by individuals and teams of up to five, or of any size for non-commercial projects. That’s a huge step up from the shamefully crippled Express editions of previous versions, although those strangely continue to exist. Just ignore them and get the Community edition instead. Tip: go to Downloads and click on “Visual Studio 2015,” the first item in the list entitled “Visual Studio downloads,” to obtain the full ISO download rather than the default web installer.

VS2015 comes with support for the new Universal Windows Platform apps, the latest iteration in Microsoft’s Windows Store saga. I haven’t looked at those as there’s still no indication of significant interest in Windows Store apps on any platform. But VS2015 also includes the .NET Framework 4.6, another in-place update to the 4.x series of releases with some new features including the “RyuJIT” compiler for 64-bit code. So I installed VS2015 Community and went through my various .NET related articles and code snippets to see what could and should be updated.

Updated Articles & Code

DPI Scaling in Windows GUIs: As far as I can tell there’s no difference whatsoever in .NET 4.6 compared to 4.5, either in WPF or Windows Forms. WPF now claims better rendering of control borders when DPI scaling is enabled but I had not noticed any defect of this kind anyway. (In case you missed it, this page recently got a big update for JavaFX 8u60.)

Lock Performance and RNG Range Projection: The original 2012/14 results proved highly reproducible, so I could simply append a second table with updated measurements and keep my analysis mostly unchanged. Microsoft’s .NET reader/writer locks and secure Windows RNG did become quite a bit faster since the previous tests, though.

WPF Drawing Performance: Whatever the cause, WPF on .NET 4.6 and Windows 10 no longer incurs any speed penalty for leaving anti-aliasing enabled – but only when running on my laptop’s discrete GPU. Moreover, pens are no longer much slower than brushes on that configuration – but only if the pens are frozen. I updated my analysis and recommendations accordingly.

Obsolete Articles & Code

Comment Reflower no longer works with VS2015 because that Microsoft has deprecated add-ins in that version. This is somewhat ironic because Community finally supports extensibility, unlike the old Express editions… but only for the new VSIX extension format. Also, Region Tools continue to not work because Visual Studio has not supported macros since VS2012. Both articles were edited accordingly.

Finally, I decided not to update the .NET Struct Performance article despite its growing obsolescence. This article compares multiple software versions on identical hardware, and I don’t have that same hardware anymore. I do wish to direct your attention to Groo’s fascinating discoveries regarding the .NET JIT optimizer and how it can influence C# microbenchmarks such as mine. He posted the link in a comment, and I’ve added it to the main article as well.