ClassBenchmark.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using BenchmarkDotNet.Attributes;
  2. namespace Jint.Benchmark;
  3. [MemoryDiagnoser]
  4. public class ClassBenchmark
  5. {
  6. private Engine _engine;
  7. [IterationSetup]
  8. public void Setup()
  9. {
  10. _engine = new Engine();
  11. _engine.Execute("""
  12. class A { x = 1; };
  13. class B extends A { y = 2; };
  14. class C extends B { z = 3; };
  15. class D extends C { x2 = 1; };
  16. class E extends D { x3 = 1; };
  17. class F extends E { x4 = 1; }
  18. """);
  19. _engine.Execute("const target = new F();");
  20. }
  21. [Benchmark]
  22. public void ConstructSimple()
  23. {
  24. var script = Engine.PrepareScript("new A();");
  25. for (var i = 0; i < 400_000; ++i)
  26. {
  27. _engine.Evaluate(script);
  28. }
  29. }
  30. [Benchmark]
  31. public void ConstructDeepInheritance()
  32. {
  33. var script = Engine.PrepareScript("new F();");
  34. for (var i = 0; i < 80_000; ++i)
  35. {
  36. _engine.Evaluate(script);
  37. }
  38. }
  39. [Benchmark]
  40. public void GetSet()
  41. {
  42. var script = Engine.PrepareScript("target.x4 = 42; target.x4;");
  43. for (var i = 0; i < 500_000; ++i)
  44. {
  45. _engine.Evaluate(script);
  46. }
  47. }
  48. }