C#Light 和 uLua的对比第二弹
上次的对比大家还有印象否,C#Light和ulua对比各有胜负
今天我们加入一个去反射优化,这是uLua没办法实现的优化,我们也就只能不要脸的胜之不武了
以原生执行同一测试时间为X1,数字越小的越快
项目 | uLua | C#Light | C#light(去反射优化) |
性能测试一 | X4.5 | X4.5 | X2.19 |
性能测试二 | X4.3 | X3.63(快15%) | X3.01 |
性能测试三 | X6.87(快20%) | X9.01 | X3.77 |
这个测试我已经不需要帮你算快了多少了
C#Light测试执行时间都只有uLua的一半左右,全面碾压。
由于uLua不是开源软件,故测试程序删除了uLua部分放在github上。有兴趣的同学可以自取对比测试
https://github.com/lightszero/CSLightStudio/tree/master/CSLightStudio/unity/perfermance
那么我们是如何实现对uLua的全面碾压的呢?lua不是号称最快的脚本语言么。
首先先来帮大家破个谣言,lua从来不是最快的脚本语言,比他快的多得是。lua是号称自己是最快的解释型脚本语言。
C#Light就不是解释型脚本语言,所以我们碾压了uLua,也不代表lua在吹牛。
然后lua由于不是c#的原生实现,所以他在c#环境表现的水土不服,也严重的影响了他的发挥。
有另外一个lua的c#原生实现 unilua,可惜C#Light和uLua都比unilua快的太多,他完全不需要参加这场小小的对比。
在c#环境,脚本语言对于性能的损失,主要是损耗在反射上。
而C#Light对每一个类型有一层包裹,默认提供了一个通用包裹RegHelper_Type,是用反射实现的。
这个包裹造成了相当的性能损失,这次我们对测试的几个类型使用了自定义包裹,得到了非常优化的性能,其实就是移除了反射的损耗。
而自定义包裹并不复杂
你只需要继承通用包裹,加上自己的东西,比如这个Debug,调用其他的都一样,仅当调用Debug.Log时,换成非反射的直接调用
自定义包裹还有其他的功能,比如在Debug.Log时加上调用脚本的文件名和行数
在 https://github.com/lightszero/CSLightStudio/tree/master/CSLightStudio/unity/Framework 中的例子,Debug.Log 就如此扩展过
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述