A_05 性能调优:采用BenchmarkDotNet对c#代码进行基准测试,
1、BenchmarkDotNet
BenchmarkDotNet可帮助将方法转换为基准、跟踪其性能并共享可重复的测量实验。简而言之,采用BenchmarkDotNet可以对方法或者代码块进行基准测试,可以对代码进行调优,并且对代码进行侵入性很低。可以在同一环境下测试不同的方法性能;可以在不同平台(.net core、.net framework)测试相同的代码,达到测试不同平台的性能。
2、Demo操作
(1)测试结果重要参数说明:
Method:测试的方法或代码;
Mean:测试方法平均用时;
Allocated:测试时需要分配的内存
(2)代码
对lua脚本解释器库NLua和MoonSharp进行基准测试,用于比较那个性能更加优秀
using BenchmarkDotNet.Attributes; using MoonSharp.Interpreter; using NLua; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace BenchmarkTestDemo { /// <summary> /// Lua脚本性能基准测试 /// </summary> [MemoryDiagnoser] public class LuaScriptTestContext { [Benchmark] public void NLua() { Lua state = new Lua(); string hex1 = "001100220044555"; string scriptCode = @" function operate(hexArr,executeCode) if(executeCode==""read"") then local index=1 local string=string temp='""temp""' humi='""humi""' local tmp_valu=string.sub(hexArr,3,4) local humi_valu=string.sub(hexArr,7,8) local result = string.format(""{%s:%d,%s:%d}"",temp,tonumber(tmp_valu,16),humi,tonumber(humi_valu,16)) return result else return """" end end"; state.DoString(scriptCode); var scriptFunc = state["operate"] as LuaFunction; var res = scriptFunc.Call(hex1, "read").First(); } [Benchmark] public void MoonSharp() { string hex1 = "001100220044555"; string scriptCode = @" function operate(hexArr,executeCode) if(executeCode==""read"") then local index=1 local string=string temp='""temp""' humi='""humi""' local tmp_valu=string.sub(hexArr,3,4) local humi_valu=string.sub(hexArr,7,8) local result = string.format(""{%s:%d,%s:%d}"",temp,tonumber(tmp_valu,16),humi,tonumber(humi_valu,16)) return result else return """" end end"; Script script = new Script(); script.DoString(scriptCode); var res = script.Call(script.Globals["operate"], hex1, "read").String; } } }
using BenchmarkDotNet.Reports; using BenchmarkDotNet.Running; using System; namespace BenchmarkTestDemo { class Program { static void Main(string[] args) { Summary summary = BenchmarkRunner.Run<LuaScriptTestContext>(); Console.Read(); } } }
(3)测试报告
从测试报告可以看出,NLua解释器库性能更加优秀
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~