.NET: the cost of returning an empty collection

BEN ABT
medialesson
Published in
3 min read4 days ago

.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.

--

--