Browse Source

Add: benchmark

AnnulusGames 1 year ago
parent
commit
412c6aa68e

+ 11 - 45
sandbox/Benchmark/AddBenchmark.cs

@@ -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];
     }
 }

+ 33 - 0
sandbox/Benchmark/BenchmarkCore.cs

@@ -0,0 +1,33 @@
+using Lua;
+using MoonSharp.Interpreter;
+
+public class BenchmarkCore
+{
+    public NLua.Lua NLuaState => nLuaState;
+    public Script MoonSharpState => moonSharpState;
+    public LuaState LuaCSharpState => luaCSharpState;
+    public string FilePath => filePath;
+    public string SourceText => sourceText;
+
+    NLua.Lua nLuaState = default!;
+    Script moonSharpState = default!;
+    LuaState luaCSharpState = default!;
+    string filePath = default!;
+    string sourceText = default!;
+
+    public void Setup(string fileName)
+    {
+        // moonsharp
+        moonSharpState = new Script();
+        Script.WarmUp();
+
+        // NLua
+        nLuaState = new();
+
+        // Lua-CSharp
+        luaCSharpState = LuaState.Create();
+
+        filePath = FileHelper.GetAbsolutePath(fileName);
+        sourceText = File.ReadAllText(filePath);
+    }
+}

+ 54 - 0
sandbox/Benchmark/CoroutineBenchmark.cs

@@ -0,0 +1,54 @@
+using BenchmarkDotNet.Attributes;
+using Lua;
+using MoonSharp.Interpreter;
+
+[Config(typeof(BenchmarkConfig))]
+public class CoroutineBenchmark
+{
+    BenchmarkCore core = new();
+    LuaValue[] buffer = new LuaValue[1];
+
+    [GlobalSetup]
+    public void GlobalSetup()
+    {
+        core.Setup("coroutine.lua");
+    }
+
+    [Benchmark(Description = "MoonSharp (RunString)")]
+    public DynValue Benchmark_MoonSharp_String()
+    {
+        return core.MoonSharpState.DoString(core.SourceText);
+    }
+
+    [Benchmark(Description = "MoonSharp (RunFile)")]
+    public DynValue Benchmark_MoonSharp_File()
+    {
+        return core.MoonSharpState.DoFile(core.FilePath);
+    }
+
+    [Benchmark(Description = "NLua (DoString)")]
+    public object[] Benchmark_NLua_String()
+    {
+        return core.NLuaState.DoString(core.SourceText);
+    }
+
+    [Benchmark(Description = "NLua (DoFile)")]
+    public object[] Benchmark_NLua_File()
+    {
+        return core.NLuaState.DoFile(core.FilePath);
+    }
+
+    [Benchmark(Description = "Lua-CSharp (DoString)")]
+    public async Task<LuaValue> Benchmark_LuaCSharp_String()
+    {
+        await core.LuaCSharpState.DoStringAsync(core.SourceText, buffer);
+        return buffer[0];
+    }
+
+    [Benchmark(Description = "Lua-CSharp (DoFileAsync)")]
+    public async Task<LuaValue> Benchmark_LuaCSharp_File()
+    {
+        await core.LuaCSharpState.DoFileAsync(core.FilePath, buffer);
+        return buffer[0];
+    }
+}

+ 17 - 0
sandbox/Benchmark/coroutine.lua

@@ -0,0 +1,17 @@
+local function c()
+    for i = 1, 100 do
+        coroutine.yield(i)
+    end
+
+    return 1000
+end
+
+local co = coroutine.create(c)
+
+local x = 0
+while coroutine.status(co) ~= "dead" do
+    local _, i = coroutine.resume(co)
+    x = x + i
+end
+
+return x