Enable performance tracking to measure execution time:
Script script = new Script();// Enable performance trackingscript.PerformanceStats.Enabled = true;// Run your scriptscript.DoString(@" local sum = 0 for i = 1, 1000000 do sum = sum + i end return sum");// Get performance logstring perfLog = script.PerformanceStats.GetPerformanceLog();Console.WriteLine(perfLog);
local function factorial(n, acc) acc = acc or 1 if n <= 1 then return acc end return factorial(n - 1, n * acc) -- tail callendprint(factorial(10000)) -- Won't overflow with TCO
TCO improves performance but loses stack trace information for debugging.
// Register once at startupUserData.RegisterType<MyClass>();// Use in multiple scripts (faster)Script script = new Script();script.Globals["MyClass"] = typeof(MyClass);
Script script = new Script();// Run script 1script.DoString("x = 10");// Clear for reusescript.Globals = new Table(script);script.Globals.RegisterCoreModules(CoreModules.Preset_Default);// Run script 2 (clean state)script.DoString("print(x)"); -- nil
using SolarSharp.Interpreter;using SolarSharp.Interpreter.Diagnostics;using System.Diagnostics;class PerformanceTest{ static void Main() { Script script = new Script(); script.PerformanceStats.Enabled = true; Stopwatch sw = Stopwatch.StartNew(); script.DoString(@" local function fib(n) if n <= 1 then return n end return fib(n-1) + fib(n-2) end return fib(30) "); sw.Stop(); Console.WriteLine($"Total time: {sw.ElapsedMilliseconds}ms"); Console.WriteLine("\nDetailed stats:"); Console.WriteLine(script.PerformanceStats.GetPerformanceLog()); }}