forked from RMC-14/RMC-14
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDependencyInjectBenchmark.cs
70 lines (60 loc) · 2.12 KB
/
DependencyInjectBenchmark.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
/*
using BenchmarkDotNet.Attributes;
using Robust.Shared.IoC;
namespace Content.Benchmarks
{
// To actually run this benchmark you'll have to make DependencyCollection public so it's accessible.
[Virtual]
public class DependencyInjectBenchmark
{
[Params(InjectMode.Reflection, InjectMode.DynamicMethod)]
public InjectMode Mode { get; set; }
private DependencyCollection _dependencyCollection;
[GlobalSetup]
public void Setup()
{
_dependencyCollection = new DependencyCollection();
_dependencyCollection.Register<X1, X1>();
_dependencyCollection.Register<X2, X2>();
_dependencyCollection.Register<X3, X3>();
_dependencyCollection.Register<X4, X4>();
_dependencyCollection.Register<X5, X5>();
_dependencyCollection.BuildGraph();
switch (Mode)
{
case InjectMode.Reflection:
break;
case InjectMode.DynamicMethod:
// Running this without oneOff will cause DependencyCollection to cache the DynamicMethod injector.
// So future injections (even with oneOff) will keep using the DynamicMethod.
// AKA, be fast.
_dependencyCollection.InjectDependencies(new TestDummy());
break;
}
}
[Benchmark]
public void Inject()
{
_dependencyCollection.InjectDependencies(new TestDummy(), true);
}
public enum InjectMode
{
Reflection,
DynamicMethod
}
private sealed class X1 { }
private sealed class X2 { }
private sealed class X3 { }
private sealed class X4 { }
private sealed class X5 { }
private sealed class TestDummy
{
[Dependency] private readonly X1 _x1;
[Dependency] private readonly X2 _x2;
[Dependency] private readonly X3 _x3;
[Dependency] private readonly X4 _x4;
[Dependency] private readonly X5 _x5;
}
}
}
*/