一个情怀引发的生产事故(续)
接上一篇博文,用Roslyn动态编译C#语句片段,情怀了一把,但内存会飙升,执行速度也奇慢,这条路走不通,回归正道,说起脚本,Lua是常用的手段之一,那就看看NLua怎么样,用NLua实现同样的效果,通过配置Lua脚本语言来实现,如下图,波澜不惊,同样是1000次执行,一点压力都没有,只有细微人内存变化。
NLua实现代码
using NLua;
using System.Text;
namespace NLuaAndRoslynCompare5
{
public class NLuaClass
{
public static object[] ExecFunction(string functionName, string function, params object[] parameters)
{
var lua = new Lua();
lua.State.Encoding = Encoding.UTF8;
lua.DoString(function);
var scriptFunc = lua[functionName] as LuaFunction;
return scriptFunc.Call(parameters);
}
}
}
调用案例,就是把一个电话号码转换成固定需要的格式,funcfionBody中是Lua脚本语言的实现函数(这里也是比C#要多学一点Lua知识的地方)。
List<string> NLua()
{
var functionBody = @"
function GetTel(tel)
local newStr=string.gsub(tel,""-"","""")
return string.sub(newStr,1,4)..""-""..string.sub(newStr,5,8)..""-"".. string.sub(newStr,9,-1)
end
";
var list = new List<string>();
var tel = "123-4567-89ab";
for (int i = 0; i < 1000; i++)
{
foreach (var obj in NLuaClass.ExecFunction("GetTel", functionBody, tel))
{
list.Add(obj.ToString());
}
}
return list;
}
通过这次Roslynl转Lua,这个教训告诉我,情怀很重要,但只能在demo中,生产还是要专业高效高性能的来支撑,多看看,多找找,多比比,多试试,多测测。
想要更快更方便的了解相关知识,可以关注微信公众号
![](https://img2022.cnblogs.com/blog/14888/202202/14888-20220201144727825-444115710.png)
****欢迎关注我的asp.net core系统课程****
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524