C# 7 provides a very powerful feature from the performance standpoint. This feature is returning by ref. Essentially this allows for value types to be returned without having to copy them.
The guidelines are normally that you shouldn’t use a struct with too many fields. Various sources quote various size guidelines. Whenever the struct was over the prescribed size it was recommended that you pass it by reference.
With the new syntax for returning types by reference, it’s now more convenient (no more methods returning via out parameter) to use structs.
In performance critical scenarios where you need to avoid polluting managed heap with too many Gen #0 objects using structs has now become more natural. In the past dealing with structs was somewhat cumbersome if you dealt with a large number of fields and needed to avoid copying of values.
I have worked on a large application at McLaren – Telemetry Acquisition System that is supplied to all teams. The performance of the application is very critical as it has to process gigabytes of telemetry data. We have used structs extensively to squeeze out every bit of performance from .NET runtime.
I think it’s my second favourite feature after value tuples.
I think it says a lot about the developer what sort of PC he/she has. Back when I was in my early 20 I had several:
- Linux (Fedora) Box – running exclusively traffic shaping (sometimes uptime of that box exceeded 1 year!). The actual script for traffic shaping took a lot of time and effort to write
- Windows Server – used as a DNS server and a POP3/SMTP server
- Windows Server with RAID5 – for storing all important data
- Windows Media Center – primarily for recording programs
- Main PC – Extreme CPU with water cooling, 4 GB Ram – back in those days it was a monster
These days I only have 2:
- Samsung Ativ Book 9 – 256 SSD, 8GB of RAM, have to say one of the best notebooks
- Main PC – Intel Extreme Edition CPU with 6 cores (2 logical for each core, so 12 in total), 64GB of RAM, OCZ SSD that goes directly into your motherboard, 2 Intel SSD, 1 x 2TB Hybrid HDD, 7 x 1 GB HDDs – that I need for running virtual machines.
So despite me getting older I am still a geek
The Task Parallel Library (TPL) was introduced in the .NET Framework 4, providing core building blocks and algorithms for parallel computation and asynchrony. This work was centered around the System.Threading.Tasks.Task type, as well as on a few higher-level constructs. These higher-level constructs address a specific subset of common parallel patterns, e.g. Parallel.For/ForEach for delightfully parallel problems expressible as parallelized loops.
While a significant step forward in enabling developers to parallelize their applications, this work did not provide higher-level constructs necessary to tackle all parallel problems or to easily implement all parallel patterns. In particular, it did not focus on problems best expressed with agent-based models or those based on message-passing paradigms. These kinds of problems are quite prevalent in technical computing domains such as finance, biological sciences, oil & gas, and manufacturing.
For TPL Dataflow (TDF), we build upon the foundational layer provided in TPL in .NET 4. TDF is a complementary set of primitives to those primitives delivered in TPL in .NET 4, addressing additional scenarios beyond those directly and easily supported with the original APIs. TPL Dataflow utilizes tasks, concurrent collections, tuples, and other features introduced in .NET 4 to bring support for parallel dataflow-based programming into the .NET Framework. It also directly integrates with new language support for tasks and asynchrony provided by both C# and Visual Basic, and with existing language support in .NET 4 for tasks provided by F#.
The idea is very simple, you cherry-pick the applications, click on get installer and you get the installer with all the latest applications you selected as one file.
Next time you reinstalling Windows go to https://ninite.com/ and create yourself and installation package
In all previous versions of C# (with the exception of C# 6.0 maybe) new features have revolved around a specific theme:
- C# 2.0 introduced generics.
- C# 3.0 enabled LINQ by bringing extension methods, lambda expressions, anonymous types and other related features.
- C# 4.0 was all about interoperability with dynamic non-strongly typed languages.
- C# 5.0 simplified asynchronous programming with the async and await keywords.
- C# 6.0 had its compiler completely rewritten from scratch, and introduced a variety of small features and improvements that were easier to implement now.
C# 7.0 is no exception to this rule. The language designers were focusing on three main themes:
- Working with Data – Increased usage of web services is changing the way data is being modelled. Instead of designing the data models as a part of the application, their definition is becoming a part of web service contracts. While this is very convenient…
View original post 1,825 more words
I’m not the only one who got burnt by ThreadStatic
To measure the efficiency of our analyzer, and also to promote the methodology of static analysis, we regularly analyze open source projects for bugs and write articles about the results. 2016 was no exception. This year is especially important as it is the year of the “growth” of the C# analyzer. PVS-Studio has obtained a large number of new C# diagnostics, an improved virtual values mechanism (symbolic execution) and much more. Based on the results of our teamwork, I compiled a kind of chart of the most interesting bugs, found in various C# projects in 2016.
View original post 1,367 more words
I’ve said it before. In my opinion, WPF is the single contemporary programming technology (disclaimer: among those that I’ve considered myself) that really requires a book to learn it. Otherwise, trying to dig using just hands on testing – as it’s indeed possible in many other cases – you might think you know enough before you do and you’ll get frustrated every day later because things won’t work the way you’d think they should. This StackOverflow question – that triggered this post – is only an example. I personally have been there too (and after the WPF experience, now I decided that I’ll always learn complex new technologies using books, although it may be unnecessary in some cases, as I’ve seen before WPF.)
But don’t get scared. Mastering WPF by starting learning it from the core instead of from the surface will provide many, many benefits that will overcome any…
View original post 146 more words