-
-
Notifications
You must be signed in to change notification settings - Fork 346
/
Program.cs
61 lines (53 loc) · 1.2 KB
/
Program.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
using System.Text;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
[MemoryDiagnoser]
public class ReverseString
{
private readonly string input;
[Params(0, 10, 100, 100_000)]
public int Length;
public ReverseString()
{
input = new string('a', Length);
}
[Benchmark]
public string Linq()
{
return new string(input.Reverse().ToArray());
}
[Benchmark]
public string ArrayReverse()
{
var chars = input.ToCharArray();
Array.Reverse(chars);
return new string(chars);
}
[Benchmark]
public string StringBuilder()
{
var chars = new StringBuilder();
for (var i = input.Length - 1; i >= 0; i--)
{
chars.Append(input[i]);
}
return chars.ToString();
}
[Benchmark]
public string Span()
{
Span<char> chars = stackalloc char[input.Length];
for (var i = 0; i < input.Length; i++)
{
chars[input.Length - 1 - i] = input[i];
}
return new string(chars);
}
}
static class Program
{
public static void Main()
{
var summary = BenchmarkRunner.Run<ReverseString>();
}
}