|
|
@@ -1,4 +1,3 @@
|
|
|
-using System.Buffers;
|
|
|
using BenchmarkDotNet.Attributes;
|
|
|
using Lua;
|
|
|
using MoonSharp.Interpreter;
|
|
|
@@ -6,83 +5,50 @@ using MoonSharp.Interpreter;
|
|
|
[Config(typeof(BenchmarkConfig))]
|
|
|
public class AddBenchmark
|
|
|
{
|
|
|
- NLua.Lua nLuaState = default!;
|
|
|
- Script moonSharpState = default!;
|
|
|
- LuaState luaCSharpState = default!;
|
|
|
-
|
|
|
- string filePath = default!;
|
|
|
- string sourceText = default!;
|
|
|
+ BenchmarkCore core = new();
|
|
|
+ LuaValue[] buffer = new LuaValue[1];
|
|
|
|
|
|
[GlobalSetup]
|
|
|
public void GlobalSetup()
|
|
|
{
|
|
|
- // moonsharp
|
|
|
- moonSharpState = new Script();
|
|
|
- Script.WarmUp();
|
|
|
-
|
|
|
- // NLua
|
|
|
- nLuaState = new();
|
|
|
-
|
|
|
- // Lua-CSharp
|
|
|
- luaCSharpState = LuaState.Create();
|
|
|
-
|
|
|
- filePath = FileHelper.GetAbsolutePath("add.lua");
|
|
|
- sourceText = File.ReadAllText(filePath);
|
|
|
+ core.Setup("add.lua");
|
|
|
}
|
|
|
|
|
|
[Benchmark(Description = "MoonSharp (RunString)")]
|
|
|
public DynValue Benchmark_MoonSharp_String()
|
|
|
{
|
|
|
- var result = moonSharpState.DoString(sourceText);
|
|
|
- return result;
|
|
|
+ return core.MoonSharpState.DoString(core.SourceText);
|
|
|
}
|
|
|
|
|
|
[Benchmark(Description = "MoonSharp (RunFile)")]
|
|
|
public DynValue Benchmark_MoonSharp_File()
|
|
|
{
|
|
|
- var result = moonSharpState.DoFile(filePath);
|
|
|
- return result;
|
|
|
+ return core.MoonSharpState.DoFile(core.FilePath);
|
|
|
}
|
|
|
|
|
|
[Benchmark(Description = "NLua (DoString)")]
|
|
|
public object[] Benchmark_NLua_String()
|
|
|
{
|
|
|
- return nLuaState.DoString(sourceText);
|
|
|
+ return core.NLuaState.DoString(core.SourceText);
|
|
|
}
|
|
|
|
|
|
[Benchmark(Description = "NLua (DoFile)")]
|
|
|
public object[] Benchmark_NLua_File()
|
|
|
{
|
|
|
- return nLuaState.DoFile(filePath);
|
|
|
+ return core.NLuaState.DoFile(core.FilePath);
|
|
|
}
|
|
|
|
|
|
[Benchmark(Description = "Lua-CSharp (DoString)")]
|
|
|
public async Task<LuaValue> Benchmark_LuaCSharp_String()
|
|
|
{
|
|
|
- var buffer = ArrayPool<LuaValue>.Shared.Rent(1);
|
|
|
- try
|
|
|
- {
|
|
|
- await luaCSharpState.DoStringAsync(sourceText, buffer);
|
|
|
- return buffer[0];
|
|
|
- }
|
|
|
- finally
|
|
|
- {
|
|
|
- ArrayPool<LuaValue>.Shared.Return(buffer);
|
|
|
- }
|
|
|
+ await core.LuaCSharpState.DoStringAsync(core.SourceText, buffer);
|
|
|
+ return buffer[0];
|
|
|
}
|
|
|
|
|
|
[Benchmark(Description = "Lua-CSharp (DoFileAsync)")]
|
|
|
public async Task<LuaValue> Benchmark_LuaCSharp_File()
|
|
|
{
|
|
|
- var buffer = ArrayPool<LuaValue>.Shared.Rent(1);
|
|
|
- try
|
|
|
- {
|
|
|
- await luaCSharpState.DoFileAsync(filePath, buffer);
|
|
|
- return buffer[0];
|
|
|
- }
|
|
|
- finally
|
|
|
- {
|
|
|
- ArrayPool<LuaValue>.Shared.Return(buffer);
|
|
|
- }
|
|
|
+ await core.LuaCSharpState.DoFileAsync(core.FilePath, buffer);
|
|
|
+ return buffer[0];
|
|
|
}
|
|
|
}
|