上次的對比大家還有印象否,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上。有興趣的同學可以自取對比測試
那麼我們是如何實現對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時加上呼叫指令碼的檔名和行數
在 中的例子,debug.log 就如此擴充套件過
this和super的對比
1 含義 this關鍵字表示本類當前物件的引用 哪個物件在呼叫this所在的方法,this就表示哪個物件 super關鍵字表示本類當前物件的父類的引用 哪個物件在呼叫super所在的方法,super就表示哪個物件中的父類部分的資料 this關鍵字詳解 super關鍵字詳解 2 super和this都...
堆和棧的對比
一般認為在c中分為這幾個儲存區 1棧 有編譯器自動分配釋放 2堆 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 3全域性區 靜態區 全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊 區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。程式...
URL和URI的對比
例 建立url url myurl new url 解析該 為uri資料 uri uri uri.parse url和uri的區別 url的格式由下列三部分組成 第一部分是協議 或稱為服務方式 第二部分是存有該資源的主機ip位址 有時也包括埠號 第三部分是主機資源的具體位址。如目錄和檔名等。第一部分...