-
Notifications
You must be signed in to change notification settings - Fork 272
/
TryAddGivenSize.cs
48 lines (42 loc) · 1.66 KB
/
TryAddGivenSize.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
// 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 System.Collections.Concurrent;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Extensions;
using MicroBenchmarks;
namespace System.Collections
{
[BenchmarkCategory(Categories.Libraries, Categories.Collections, Categories.GenericCollections)]
[GenericTypeArguments(typeof(int))] // value type
[GenericTypeArguments(typeof(string))] // reference type
public class TryAddGiventSize<T>
{
private T[] _uniqueValues;
[Params(Utils.DefaultCollectionSize)]
public int Count;
[GlobalSetup]
public void Setup() => _uniqueValues = ValuesGenerator.ArrayOfUniqueValues<T>(Count);
#if !NETFRAMEWORK // API added in .NET Core 2.0
[Benchmark]
public Dictionary<T, T> Dictionary()
{
var collection = new Dictionary<T, T>(Count);
var uniqueValues = _uniqueValues;
for(int i = 0; i < uniqueValues.Length; i++)
collection.TryAdd(uniqueValues[i], uniqueValues[i]);
return collection;
}
#endif
[Benchmark]
public ConcurrentDictionary<T, T> ConcurrentDictionary()
{
var collection = new ConcurrentDictionary<T, T>(Utils.ConcurrencyLevel, Count);
var uniqueValues = _uniqueValues;
for(int i = 0; i < uniqueValues.Length; i++)
collection.TryAdd(uniqueValues[i], uniqueValues[i]);
return collection;
}
}
}