zoukankan      html  css  js  c++  java
  • 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,是用反射实现的。

    这个包裹造成了相当的性能损失,这次我们对测试的几个类型使用了自定义包裹,得到了非常优化的性能,其实就是移除了反射的损耗。

    image

    而自定义包裹并不复杂

    image

    你只需要继承通用包裹,加上自己的东西,比如这个Debug,调用其他的都一样,仅当调用Debug.Log时,换成非反射的直接调用

    自定义包裹还有其他的功能,比如在Debug.Log时加上调用脚本的文件名和行数

    https://github.com/lightszero/CSLightStudio/tree/master/CSLightStudio/unity/Framework 中的例子,Debug.Log 就如此扩展过

  • 相关阅读:
    UT斯达康 G680手机那些事儿
    VoIP使用总结
    Test
    Remove "Click here to enable Instant Search"
    常用的在线播放(电台和电视台)
    Sipdroid Error “Registration failed (404 not found)”
    通过Word 2007发布Blog
    【Go反射】读取对象
    【Go反射】修改对象
    【爬虫】callback=jQuery+数字在爬虫中如何模拟
  • 原文地址:https://www.cnblogs.com/crazylights/p/3910810.html
Copyright © 2011-2022 走看看