-
Notifications
You must be signed in to change notification settings - Fork 272
/
GetChildKeysTests.cs
111 lines (96 loc) · 4.26 KB
/
GetChildKeysTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Memory;
using BenchmarkDotNet.Attributes;
using MicroBenchmarks;
using System;
namespace Benchmark
{
[BenchmarkCategory(Categories.Libraries)]
public class GetChildKeysTests
{
private ChainedConfigurationProvider _chainedConfig;
private ChainedConfigurationProvider _chainedConfigEmpty;
private ChainedConfigurationProvider _chainedConfigWithSplitting;
private ChainedConfigurationProvider _chainedConfigWithCommonPaths;
private readonly string[] _emptyArray = Array.Empty<string>();
[GlobalSetup]
public void SetupBasic()
{
var emptyKeys = new Dictionary<string, string>() { };
for (int i = 0; i < 1000; i++)
{
emptyKeys.Add(new string(' ', i), string.Empty);
}
var inputKeys = new Dictionary<string, string>() { };
for (int i = 1000; i < 2000; i++)
{
inputKeys.Add(i.ToString(), string.Empty);
}
var splittingKeys = new Dictionary<string, string>() { };
for (int i = 1000; i < 2000; i++)
{
splittingKeys.Add("a:" + i.ToString(), string.Empty);
}
var keysWithCommonPaths = new Dictionary<string, string>() { };
for (int i = 1000; i < 2000; i++)
{
keysWithCommonPaths.Add("a:b:c" + i.ToString(), string.Empty);
}
_chainedConfigEmpty = new ChainedConfigurationProvider(new ChainedConfigurationSource
{
Configuration = new ConfigurationBuilder()
.Add(new MemoryConfigurationSource { InitialData = emptyKeys })
.Build(),
ShouldDisposeConfiguration = false,
});
_chainedConfig = new ChainedConfigurationProvider(new ChainedConfigurationSource
{
Configuration = new ConfigurationBuilder()
.Add(new MemoryConfigurationSource { InitialData = inputKeys })
.Build(),
ShouldDisposeConfiguration = false,
});
_chainedConfigWithSplitting = new ChainedConfigurationProvider(new ChainedConfigurationSource
{
Configuration = new ConfigurationBuilder()
.Add(new MemoryConfigurationSource { InitialData = splittingKeys })
.Build(),
ShouldDisposeConfiguration = false,
});
_chainedConfigWithCommonPaths = new ChainedConfigurationProvider(new ChainedConfigurationSource
{
Configuration = new ConfigurationBuilder()
.Add(new MemoryConfigurationSource { InitialData = keysWithCommonPaths })
.Build(),
ShouldDisposeConfiguration = false,
});
}
[GlobalCleanup(Targets = new[] {
nameof(AddChainedConfigurationNoDelimiter),
nameof(AddChainedConfigurationEmpty),
nameof(AddChainedConfigurationWithSplitting),
nameof(AddChainedConfigurationWithCommonPaths)
})]
public void CleanupBasic()
{
_chainedConfig.Dispose();
_chainedConfigEmpty.Dispose();
_chainedConfigWithSplitting.Dispose();
_chainedConfigWithCommonPaths.Dispose();
}
[Benchmark]
public void AddChainedConfigurationNoDelimiter() => _chainedConfig.GetChildKeys(_emptyArray, null);
[Benchmark]
[MemoryRandomization]
public void AddChainedConfigurationEmpty() => _chainedConfigEmpty.GetChildKeys(_emptyArray, null);
[Benchmark]
public void AddChainedConfigurationWithSplitting() => _chainedConfigWithSplitting.GetChildKeys(_emptyArray, null);
[Benchmark]
[MemoryRandomization]
public void AddChainedConfigurationWithCommonPaths() => _chainedConfigWithCommonPaths.GetChildKeys(_emptyArray, null);
}
}