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 就如此擴展過


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM