AddBenchmark.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System.Buffers;
  2. using BenchmarkDotNet.Attributes;
  3. using Lua;
  4. using MoonSharp.Interpreter;
  5. [Config(typeof(BenchmarkConfig))]
  6. public class AddBenchmark
  7. {
  8. NLua.Lua nLuaState = default!;
  9. Script moonSharpState = default!;
  10. LuaState luaCSharpState = default!;
  11. string filePath = default!;
  12. string sourceText = default!;
  13. [GlobalSetup]
  14. public void GlobalSetup()
  15. {
  16. // moonsharp
  17. moonSharpState = new Script();
  18. Script.WarmUp();
  19. // NLua
  20. nLuaState = new();
  21. // Lua-CSharp
  22. luaCSharpState = LuaState.Create();
  23. filePath = FileHelper.GetAbsolutePath("add.lua");
  24. sourceText = File.ReadAllText(filePath);
  25. }
  26. [Benchmark(Description = "MoonSharp (RunString)")]
  27. public DynValue Benchmark_MoonSharp_String()
  28. {
  29. var result = moonSharpState.DoString(sourceText);
  30. return result;
  31. }
  32. [Benchmark(Description = "MoonSharp (RunFile)")]
  33. public DynValue Benchmark_MoonSharp_File()
  34. {
  35. var result = moonSharpState.DoFile(filePath);
  36. return result;
  37. }
  38. [Benchmark(Description = "NLua (DoString)")]
  39. public object[] Benchmark_NLua_String()
  40. {
  41. return nLuaState.DoString(sourceText);
  42. }
  43. [Benchmark(Description = "NLua (DoFile)")]
  44. public object[] Benchmark_NLua_File()
  45. {
  46. return nLuaState.DoFile(filePath);
  47. }
  48. [Benchmark(Description = "Lua-CSharp (DoString)")]
  49. public async Task<LuaValue> Benchmark_LuaCSharp_String()
  50. {
  51. var buffer = ArrayPool<LuaValue>.Shared.Rent(1);
  52. try
  53. {
  54. await luaCSharpState.DoStringAsync(sourceText, buffer);
  55. return buffer[0];
  56. }
  57. finally
  58. {
  59. ArrayPool<LuaValue>.Shared.Return(buffer);
  60. }
  61. }
  62. [Benchmark(Description = "Lua-CSharp (DoFileAsync)")]
  63. public async Task<LuaValue> Benchmark_LuaCSharp_File()
  64. {
  65. var buffer = ArrayPool<LuaValue>.Shared.Rent(1);
  66. try
  67. {
  68. await luaCSharpState.DoFileAsync(filePath, buffer);
  69. return buffer[0];
  70. }
  71. finally
  72. {
  73. ArrayPool<LuaValue>.Shared.Return(buffer);
  74. }
  75. }
  76. }