NBodyBenchmark.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using BenchmarkDotNet.Attributes;
  2. using Lua;
  3. using Lua.Standard;
  4. using MoonSharp.Interpreter;
  5. [Config(typeof(BenchmarkConfig))]
  6. public class NBodyBenchmark
  7. {
  8. BenchmarkCore core = default!;
  9. LuaValue[] buffer = new LuaValue[1];
  10. [IterationSetup]
  11. public void Setup()
  12. {
  13. core = new();
  14. core.Setup("n-body.lua");
  15. core.LuaCSharpState.OpenStandardLibraries();
  16. }
  17. [IterationCleanup]
  18. public void Cleanup()
  19. {
  20. core.Dispose();
  21. core = default!;
  22. GC.Collect();
  23. }
  24. [Benchmark(Description = "MoonSharp (RunString)")]
  25. public DynValue Benchmark_MoonSharp_String()
  26. {
  27. return core.MoonSharpState.DoString(core.SourceText);
  28. }
  29. [Benchmark(Description = "MoonSharp (RunFile)")]
  30. public DynValue Benchmark_MoonSharp_File()
  31. {
  32. return core.MoonSharpState.DoFile(core.FilePath);
  33. }
  34. [Benchmark(Description = "NLua (DoString)", Baseline = true)]
  35. public object[] Benchmark_NLua_String()
  36. {
  37. return core.NLuaState.DoString(core.SourceText);
  38. }
  39. [Benchmark(Description = "NLua (DoFile)")]
  40. public object[] Benchmark_NLua_File()
  41. {
  42. return core.NLuaState.DoFile(core.FilePath);
  43. }
  44. [Benchmark(Description = "Lua-CSharp (DoString)")]
  45. public async Task<LuaValue> Benchmark_LuaCSharp_String()
  46. {
  47. await core.LuaCSharpState.DoStringAsync(core.SourceText, buffer);
  48. return buffer[0];
  49. }
  50. [Benchmark(Description = "Lua-CSharp (DoFileAsync)")]
  51. public async Task<LuaValue> Benchmark_LuaCSharp_File()
  52. {
  53. await core.LuaCSharpState.DoFileAsync(core.FilePath, buffer);
  54. return buffer[0];
  55. }
  56. }