
While analyzing nearly 120 million requests, we noticed that one thing was dragging down our performance: parsing user agents for detecting bots and search engines.
For this task, we used the UA Parser library, which is quite widely used. Unfortunately, it is quite outdated, generates a lot of allocations and lowers our performance in its implementation.
1| Method | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
2|-------------------- |-------------|-----------|-----------|---------|--------|-------|-----------|
3| 'UA Parser' | 3,238.59 us | 27.435 us | 25.663 us | 7.8125 | - | - | 168225 B |
Since the alternatives are not really better, we decided to build our own parser: mycsharp/HttpUserAgentParser
During implementation, we paid special attention to the fact that this component could be part of a hot path of the application and therefore invested a lot in optimized performance. And our implementation lives up to this expectation in comparison!
1| Method | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
2|-------------------- |-------------|-----------|-----------|---------|--------|-------|-----------|
3| 'UA Parser' | 3,238.59 us | 27.435 us | 25.663 us | 7.8125 | - | - | 168225 B |
4| UserAgentService | 391.11 us | 5.126 us | 4.795 us | 35.1563 | 3.4180 | - | 589664 B |
5| HttpUserAgentParser | 67.07 us | 0.740 us | 0.693 us | - | - | - | 848 B |
As can be seen, we generate minimal allocations, but as the only implementation no GenX load at all!
Besides the implementation itself, we also created a caching component that checks respective browser agent strings for equality and thus very widely used agents only need to be parsed once.
We also provide a Dependency Injection registration for ASP.NET Core directly.
Related articles

May 20, 2021 - 2 min read
Plugin Mechanism with Parts in ASP.NET Core
A plugin-like mechanism is already built into ASP.NET Core and is called Parts or Application Parts . In principle, it is a discovery …

May 11, 2021 - 1 min read
.NET Updates Mai 2021
Heute hat Microsoft die .NET Updates von Mai 2021 auf ihrem Blogpost veröffentlicht. OS Lifecycle update Behavioral change in Asp.Net 2.1 …

Apr 06, 2021 - 1 min read
.NET Updates April 2021
Heute hat Microsoft die .NET Updates von April 2021 auf ihrem Blogpost veröffentlicht. Diesmal wurden vor allem die Abhängigkeiten wie …
Let's Work Together
Looking for an experienced Platform Architect or Engineer for your next project? Whether it's cloud migration, platform modernization or building new solutions from scratch - I'm here to help you succeed.
