NBodyBenchmark.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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)")]
  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 = "NeoLua (DoChunk(code))")]
  45. public Neo.IronLua.LuaResult Benchmark_NeoLua_String()
  46. {
  47. return core.NeoLuaEnvironment.DoChunk(core.SourceText, "chunk");
  48. }
  49. [Benchmark(Description = "NeoLua (DoChunk(fileName))")]
  50. public Neo.IronLua.LuaResult Benchmark_NeoLua_File()
  51. {
  52. return core.NeoLuaEnvironment.DoChunk(core.FilePath);
  53. }
  54. [Benchmark(Description = "Lua-CSharp (DoString)")]
  55. public async Task<LuaValue> Benchmark_LuaCSharp_String()
  56. {
  57. await core.LuaCSharpState.DoStringAsync(core.SourceText, buffer);
  58. return buffer[0];
  59. }
  60. [Benchmark(Description = "Lua-CSharp (DoFileAsync)")]
  61. public async Task<LuaValue> Benchmark_LuaCSharp_File()
  62. {
  63. await core.LuaCSharpState.DoFileAsync(core.FilePath, buffer);
  64. return buffer[0];
  65. }
  66. }