First of all I’d like to offer my sincere apologies to those who have asked me to update my benchmark numbers following the release of Json.NET 5.0.6, it took me a long time to clear some of my backlogs and only just got around to it, sorry for the waiting!
The good news is that, based on my tests against a simple POCO object (that’s representative of the payload that I work with often) Json.NET has delivered on its promised and offered big improvements on deserialization performance and is now neck-to-neck with ServiceStack.Text in terms of deserialization speed.
DISCLAIMER : as always, you should be benchmark against your payload and use case, the benchmark numbers I have produced here is unlikely to be representative of your use cases and neither is anybody else’s benchmark numbers.
Here is the result against the latest versions of JSON serializers at the time of writing:
Versions of serializers tested:
- Json.Net v5.0.6
- ServiceStack.Text v3.9.59
- fastJson v1.9.6
- JayRock v0.9.12915
- JsonFx v2.0.1209.2802
- MongoDB Driver v1.8.2
As mentioned previously, the latest version of Json.Net has made big improvements on its deserialization speed and is now on par with ServiceStack.Text.
Versions of serializers tested:
- protobuf-net v184.108.40.2060
- MsgPack v0.1.4298.15470
- FlourineFX v1.2.3
- Filbert v0.1.4617.2621
As you can see, there is little to choose between the usual suspects of protobuf-net, MessagePack and MessageShark, who are well clear of the rest of the pack. I have also included two additional binary serializers:
- FlourineFX, an open source library for working with Flash/Flex remoting, and comes with a serializer for AMF encoded data
- Filbert, a BERT (Binary ERlang Term) serializer and BERT-RPC client I wrote in F#. As you can see, purely from a performance point of view it needs much optimization on its deserialization speed (specifically it needs a buffer pool rather than allocating new array each time) which I have been hoping to find time to do for a while. In general, is interoperability with Erlang something .Net developers are interested in exploring? Would love to hear your thoughts on the matter, and if you know of alternative approaches (other than via something like BERT) you think worth investing.
I specialise in rapidly transitioning teams to serverless and building production-ready services on AWS.
Are you struggling with serverless or need guidance on best practices? Do you want someone to review your architecture and help you avoid costly mistakes down the line? Whatever the case, I’m here to help.
Check out my new course, Complete Guide to AWS Step Functions. In this course, we’ll cover everything you need to know to use AWS Step Functions service effectively. Including basic concepts, HTTP and event triggers, activities, callbacks, nested workflows, design patterns and best practices.
Here is a complete list of all my posts on serverless and AWS Lambda. In the meantime, here are a few of my most popular blog posts.
- Lambda optimization tip – enable HTTP keep-alive
- You are thinking about serverless costs all wrong
- Many faced threats to Serverless security
- We can do better than percentile latencies
- I’m afraid you’re thinking about AWS Lambda cold starts all wrong
- Yubl’s road to Serverless
- AWS Lambda – should you have few monolithic functions or many single-purposed functions?
- AWS Lambda – compare coldstart time with different languages, memory and code sizes
- Guys, we’re doing pagination wrong