AddBenchmark.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using System.Reflection;
  2. using BenchmarkDotNet.Attributes;
  3. using Lua;
  4. using Lua.Standard;
  5. using MoonSharp.Interpreter;
  6. [Config(typeof(BenchmarkConfig))]
  7. public class AddBenchmark
  8. {
  9. BenchmarkCore core = new();
  10. LuaValue[] buffer = new LuaValue[1];
  11. public static double Add(double x, double y)
  12. {
  13. return x + y;
  14. }
  15. [IterationSetup]
  16. public void Setup()
  17. {
  18. core = new();
  19. core.Setup("add.lua");
  20. core.LuaCSharpState.OpenStandardLibraries();
  21. core.LuaCSharpState.Environment["add"] = new LuaFunction("add", (context, buffer, ct) =>
  22. {
  23. buffer.Span[0] = context.GetArgument<double>(0) + context.GetArgument<double>(1);
  24. return new(1);
  25. });
  26. core.MoonSharpState.Globals["add"] = (Func<double, double, double>)Add;
  27. core.NLuaState.RegisterFunction("add", typeof(AddBenchmark).GetMethod(nameof(Add), BindingFlags.Static | BindingFlags.Public));
  28. }
  29. [IterationCleanup]
  30. public void Cleanup()
  31. {
  32. core.Dispose();
  33. core = default!;
  34. GC.Collect();
  35. }
  36. [Benchmark(Description = "MoonSharp (RunString)")]
  37. public DynValue Benchmark_MoonSharp_String()
  38. {
  39. return core.MoonSharpState.DoString(core.SourceText);
  40. }
  41. [Benchmark(Description = "MoonSharp (RunFile)")]
  42. public DynValue Benchmark_MoonSharp_File()
  43. {
  44. return core.MoonSharpState.DoFile(core.FilePath);
  45. }
  46. [Benchmark(Description = "NLua (DoString)")]
  47. public object[] Benchmark_NLua_String()
  48. {
  49. return core.NLuaState.DoString(core.SourceText);
  50. }
  51. [Benchmark(Description = "NLua (DoFile)")]
  52. public object[] Benchmark_NLua_File()
  53. {
  54. return core.NLuaState.DoFile(core.FilePath);
  55. }
  56. [Benchmark(Description = "Lua-CSharp (DoString)")]
  57. public async Task<LuaValue> Benchmark_LuaCSharp_String()
  58. {
  59. await core.LuaCSharpState.DoStringAsync(core.SourceText, buffer);
  60. return buffer[0];
  61. }
  62. [Benchmark(Description = "Lua-CSharp (DoFileAsync)")]
  63. public async Task<LuaValue> Benchmark_LuaCSharp_File()
  64. {
  65. await core.LuaCSharpState.DoFileAsync(core.FilePath, buffer);
  66. return buffer[0];
  67. }
  68. }