.NET: the cost of returning an empty collection
.NET: the cost of returning an empty collection
Dealing with empty lists is an everyday situation in .NET. An empty list is often preferred to a null
in order to control the logic. But how expensive is it to return an empty list?
The options
A List
can currently - .NET 9 - be initialized in several ways
new List() | Creates a list with the default capacity 0
new List(0) | Creates a list with the default capacity 0
new List(1) | Creates a list with the default capacity 4
new List(31) | Creates a list with the default capacity 31
[] | Creates a list with the default capacity 0
The notation []
is the latest and currently recommended notation. This is because this applies not only to List
, but to all .NET collections.
In contrast to List
, the most efficient option is not the constructor, but Array.Empty
. []
for arrays is therefore an alias for Array.Empty
.
Benchmark
The benchmark shows very clearly why []
is the recommended spelling: it always guarantees the most efficient solution.
BenchmarkDotNet v0.13.12, Windows 10 (10.0.19045.4651/22H2/2022Update)
AMD Ryzen 9 5950X, 1 CPU, 32 logical and 16 physical cores
.NET SDK 9.0.100-preview.5.24307.3
[Host] : .NET 9.0.0 (9.0.24.30607), X64 RyuJIT AVX2
.NET 9.0 : .NET 9.0.0 (9.0.24.30607), X64 RyuJIT AVX2
| Method | Mean | Ratio | Gen0 | Allocated |
|------------ |----------:|------:|-------:|----------:|
| List() | 2.7975 ns | 1.00 | 0.0019 | 32 B |
| List(0) | 2.9224 ns | 1.04 | 0.0019 | 32 B |
| List [] | 2.7643 ns | 0.99 | 0.0019 | 32 B |
| Array.Empty | 0.4912 ns | 0.18 | - | - |
| Array [] | 0.4835 ns | 0.18 | - | - |
| HashSet() | 4.0250 ns | 1.48 | 0.0038 | 64 B |
| HashSet [] | 4.0798 ns | 1.46 | 0.0038 | 64 B |
The bechmark:
https://github.com/BenjaminAbt/SustainableCode/tree/main/csharp/list-empty-return
Autor
Benjamin Abt
Ben is a passionate developer and software architect and especially focused on .NET, cloud and IoT. In his professional he works on high-scalable platforms for IoT and Industry 4.0 focused on the next generation of connected industry based on Azure and .NET. He runs the largest german-speaking C# forum myCSharp.de, is the founder of the Azure UserGroup Stuttgart, a co-organizer of the AzureSaturday, runs his blog, participates in open source projects, speaks at various conferences and user groups and also has a bit free time. He is a Microsoft MVP since 2015 for .NET and Azure.
Originally published at https://schwabencode.com on July 22, 2024.