| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /*
- 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;
- }
- }
- }
- */
|