On the 5th of November 2018 I had a pleasure to attend Dotnetos Conference in Warsaw. It was a first conference oriented towards a single topic – .NET performance – I took part in. 

I didn’t know what to expect from this event, as it was much smaller than other conferences I used to attend and actually organized by 3 .NET geeks (more about them later 🙂 ).

In today’s post I’d like to share with you my feelings about the event.  I’d also like to smuggle some topics that were covered during the sessions, so you can stay up-to-date with .NET performance world’s trends and dig into them yourself.

Sessions

There was only a single room in which presentations took place. For me it’s a plus, at least there’s no problem with choosing which talk to attend 😉

Even though the conference was held in Warsaw, Poland, all talks (and generally the whole conference) were given in English. There were 7 sessions in total, prepared by 8 – both Polish and international – speakers.

Szymon Kulec – Born to perform – incorporate .NET Core performance

In the opening talk, Szymon started with demystifying performance aspects of .NET Core. We went through the topics like pinning and pooling, Span<T> and Memory<T>.  We’ve also seen some usage of Unsafe.As for “unsafe” types casting.

Generally, the talk was very well-organized. Speaker used a lot of interesting analogies in his slides, which made the presentation very interesting. Great start! 🙂

Alexandre Mutel – Behind the burst compiler, compiling .NET IL to highly optimized native code using LLVM

Alex Mutel

Alexandre took as for a bit different journey – he talked about Burst, which is a Unity’s compiler. It transforms IL into highly-optimized native code with the help of LLVM. It was a really interesting talk, which showed us how performance can be boosted even more, which brings much better experience e.g. in games developed using Unity. Alex also said few words about RyuJIT compiler, which currently fully operates .NET Core

The talk was very motivating. Looking on the amount of great job the guys at Unity are doing with Burst… was nice and interesting to hear that 😉

Konrad Kokosa – The history of .NET GC customization – from (almost) nothing to (almost) everything

Konrad Kokosa

The last talk before lunch break was given by Konrad Kokosa, the author of Pro .NET Memory Management.  Konrad’s talk was – as the name tells us – about customizing .NET’s Garbage Collector. I’ve already mentioned in this post that GC can work in several modes, but this presentation showed me that there are many more possibilities for tweaking it. Except of going through all different GC modes, like workstations/server/(non)concurrent GCs, the speaker told us what are latency modes and VM hoarding.

However, what’s probably the most interesting from Konrad’s talk is that he’s been developing his own, custom GC implementation! It’s called ZeroGC and is available on GitHub. Its main goal is to provide the GC implementation which does nothing, except of allowing to allocate the memory. Very interesting, especially if you’d like to know what’s necessary to totally change GC implementation in .NET Core 2.0+ yourself.

The session was very good, I felt that Konrad is really into .NET performance topics. Which is not surprising 🙂

Łukasz Pyrzyk – Daily Performance Fuckups

Łukasz Pyrzyk

First after-lunch talk was given by Łukasz, who served us with a bunch of .NET performance sins (or fuckups, as you prefer 😉 ) present in .NET developers’ life.  Among others, we’ve seen some interesting case-study based on Azure Cosmos DB and one of the issues the speaker and his team met while deploying the system based on it on production.

The talk was engaging and really “close to our everyday life”. It was practical and showed that even if we think we’re doing everything correctly, following the documentation and best practices, we may still meet a lot of problems no one would ever think of.   

Adam Sitnik and Andrey Akinshin – Powerful benchmarking in .NET

Adam and Andrey

These two crazy guys – Adam and Andrey, decided to give a talk lead by both of them. The session was held in a form of conversation – one of the guys was asking the question, while the other was answering it. Quite interesting form, especially that both of them are really passionate about what they’re talking about, so it’s good they chose such clear organization of their talk 🙂

Guys told us how we should all measure the performance of our applications – of course using Benchmark.NET library. Honestly, it has really become a benchmarking standard in .NET ecosystem recently, especially that it’s supported by .NET Foundation.

The goal of Benchmark.NET is to allow the developers measure the performance (execution time and many more…) without taking care of creating proper sandbox environment or choosing correct number of iterations – the library does it all for us. It’s easy to start using it, however it offers a lot of possibilities. You can find more information on its GitHub repository.  Definitely worth knowing and checking.

Shay Rojansky – From zero to hero – the Npgsql optimization story

Shay Rojanski

In one before the last technical presentation of the day, Shay presented behind-the-scenes of Npgsql, an open-source ADO.NET provider for PostgreSQL. The speaker also explained what is a lock-free programming and how to do it with connection pooling techniques.

The talk was information-rich and compelling. Shay is a charismatic and engaged speaker, it was very nice and motivating listening to his passionate talk.

Jarosław Pałka – We are all doomed, which is why, what we do can not be called programming

Jarosław Pałka

I didn’t know Jarosław before, but he’s a really cool guy – even though he comes from Java world! 😀

Jarek’s talk was mostly focused on virtual machines, how they work and why we actually use them. The speaker is also very charismatic and engaging the audience. He explained basic VMs concepts based on his own EgoVM virtual machine. Slides from the talk (not sure if these are exactly the same ones, but it seems so) can be found here.

I enjoyed the talk and the speaker itself, it was a perfect end of the performance geeks day 🙂

Venue and organization

Last but not least, few words on the conference venue and organization in general. The Airport Hotel Okęcie, in which the Dotnetos Conference took place, was a very good choice. The event was rather small, compared to conferences like .NET Developer Days and that’s what made it really cool and cosy. The food was very good, both lunch and snacks/cakes available in the venue’s hall.

Another great idea was the form of voting for the talks by putting green, yellow or red cards into a box after each session. Easy, but effective – I saw a lot of people voting.

In the conference starter pack we got a linen bag and shirt with Dotnetos logo. Of course, the organizers couldn’t miss the Dotnetos tabasco sauce which we also received 🙂

Summary

Summing up, the Dotnetos Conference 2018 was a great event, with only high-quality speakers. I can’t even choose the best session – I enjoyed all of them.

Huge thank you to the organizers – Łukasz, Konrad and Szymon. Great job guys, we’re waiting for more! 🙂

If you’re interested in internals of .NET, I also invite you to check out my .NET Internals series 😉