-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCreateInstanceTests.cs
More file actions
114 lines (98 loc) · 4.23 KB
/
CreateInstanceTests.cs
File metadata and controls
114 lines (98 loc) · 4.23 KB
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
112
113
114
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Attributes.Exporters;
using CreateInstance.Methods;
namespace CreateInstance
{
[MarkdownExporter, AsciiDocExporter, HtmlExporter, CsvExporter, RPlotExporter]
public class CreateInstanceTests
{
private readonly FastObjectFactory.CreateObject fastObjectFactory;
private readonly ExpressionsActivator.ObjectActivator<MyTestObject> expressionsActivator;
private readonly GenericFactory<MyTestObject> genericFactory;
private readonly Func<MyTestObject> dynamicModuleFactory;
private readonly Func<MyTestObject> expressionNewFactory;
private readonly Func<object> expressionNewObjectFactory;
private readonly Func<object[], MyTestObject> expressionNewParametersFactory;
private readonly Func<object[], object> expressionNewParametersObjectFactory;
public CreateInstanceTests()
{
expressionsActivator = ExpressionsActivator.Get<MyTestObject>();
fastObjectFactory = FastObjectFactory.CreateObjectFactory<MyTestObject>();
genericFactory = new GenericFactory<MyTestObject>();
dynamicModuleFactory = DynamicModuleLambdaCompiler.GenerateFactory<MyTestObject>();
expressionNewFactory = ExtensionsNew.NewFactory<MyTestObject>();
expressionNewObjectFactory = ExtensionsNew.NewFactory(typeof(MyTestObject));
expressionNewParametersFactory = ExtensionsNew.NewFactory<MyTestObject>(typeof(string), typeof(int));
expressionNewParametersObjectFactory = ExtensionsNew.NewFactory(typeof(MyTestObject), typeof(string), typeof(int));
}
[Benchmark(Baseline = true, Description = "Сontrustor")]
public MyTestObject ConstructorTest()
{
return new MyTestObject();
}
[Benchmark(Description = "new T()")]
public MyTestObject GenericFactoryTest()
{
return genericFactory.GetNewItem();
}
[Benchmark(Description = "Activator.CreateInstance")]
public MyTestObject ActivatorTypeofTest()
{
return (MyTestObject)Activator.CreateInstance(typeof(MyTestObject));
}
[Benchmark(Description = "Activator.CreateInstance<T>")]
public MyTestObject ActivatorGenericTest()
{
return Activator.CreateInstance<MyTestObject>();
}
[Benchmark(Description = "FastObjectFactory")]
public MyTestObject FastObjectFactoryTest()
{
return (MyTestObject)fastObjectFactory();
}
[Benchmark(Description = "ExpressionsActivator")]
public MyTestObject ExpressionsActivatorTest()
{
return expressionsActivator();
}
[Benchmark(Description = "DynamicModuleLambdaCompiler")]
public MyTestObject DynamicModuleLambdaCompilerTest()
{
return dynamicModuleFactory();
}
[Benchmark(Description = "FastActivator<T>.Create")]
public MyTestObject FastActivatorGenericTest()
{
return FastActivator<MyTestObject>.Create();
}
[Benchmark(Description = "FastActivator.CreateInstance<T>")]
public MyTestObject FastActivatorTest()
{
return FastActivator.CreateInstance<MyTestObject>();
}
[Benchmark(Description = "ExtensionsNew.NewFactory<T>")]
public MyTestObject ExtensionsNewGenericTest()
{
return expressionNewFactory();
}
[Benchmark(Description = "ExtensionsNew.NewFactory")]
public MyTestObject ExtensionsNewTypeofTest()
{
return (MyTestObject)expressionNewObjectFactory();
}
[Benchmark(Description = "ExtensionsNew.NewFactory<T> with params")]
public MyTestObject ExtensionsNewGenericParametersTest()
{
return expressionNewParametersFactory(new object[]{"1", 2});
}
[Benchmark(Description = "ExtensionsNew.NewFactory with params")]
public MyTestObject ExtensionsNewObjectParametersTest()
{
return (MyTestObject)expressionNewParametersObjectFactory(new object[] { "1", 2 });
}
}
}