DependencyInjectBenchmark.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*
  2. using BenchmarkDotNet.Attributes;
  3. using Robust.Shared.IoC;
  4. namespace Content.Benchmarks
  5. {
  6. // To actually run this benchmark you'll have to make DependencyCollection public so it's accessible.
  7. [Virtual]
  8. public class DependencyInjectBenchmark
  9. {
  10. [Params(InjectMode.Reflection, InjectMode.DynamicMethod)]
  11. public InjectMode Mode { get; set; }
  12. private DependencyCollection _dependencyCollection;
  13. [GlobalSetup]
  14. public void Setup()
  15. {
  16. _dependencyCollection = new DependencyCollection();
  17. _dependencyCollection.Register<X1, X1>();
  18. _dependencyCollection.Register<X2, X2>();
  19. _dependencyCollection.Register<X3, X3>();
  20. _dependencyCollection.Register<X4, X4>();
  21. _dependencyCollection.Register<X5, X5>();
  22. _dependencyCollection.BuildGraph();
  23. switch (Mode)
  24. {
  25. case InjectMode.Reflection:
  26. break;
  27. case InjectMode.DynamicMethod:
  28. // Running this without oneOff will cause DependencyCollection to cache the DynamicMethod injector.
  29. // So future injections (even with oneOff) will keep using the DynamicMethod.
  30. // AKA, be fast.
  31. _dependencyCollection.InjectDependencies(new TestDummy());
  32. break;
  33. }
  34. }
  35. [Benchmark]
  36. public void Inject()
  37. {
  38. _dependencyCollection.InjectDependencies(new TestDummy(), true);
  39. }
  40. public enum InjectMode
  41. {
  42. Reflection,
  43. DynamicMethod
  44. }
  45. private sealed class X1 { }
  46. private sealed class X2 { }
  47. private sealed class X3 { }
  48. private sealed class X4 { }
  49. private sealed class X5 { }
  50. private sealed class TestDummy
  51. {
  52. [Dependency] private readonly X1 _x1;
  53. [Dependency] private readonly X2 _x2;
  54. [Dependency] private readonly X3 _x3;
  55. [Dependency] private readonly X4 _x4;
  56. [Dependency] private readonly X5 _x5;
  57. }
  58. }
  59. }
  60. */