標籤:android http io ar os sp java for on
http://www.unity蠻牛.com/thread-32861-1-1.html
測試環境: unity4.5.2 三個指令碼全是源碼匯入 PC :處理器 Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz 3.60GHz 記憶體: 8.00GB 系統 : Windows 7 64位先貼下源碼:(註:cls的作者說 cls指令碼範圍判斷比較厲害 所以利用指令碼裡面的for迴圈 可能有點損耗cls的測試結果 更多測試結果請下載源碼自行測試)
Stopwatch watch = null;
{
watch = Stopwatch.StartNew();
Script env = new Script();
env.LoadLibrary();
env.PushAssembly(typeof(GameObject).Assembly);
var token = env.LoadString(m_Scorpio);
m_ScorpioRuntime = string.Format("Scorpio 耗時:{0} ms 傳回值 : {1}", watch.ElapsedMilliseconds, token);
}
{
watch = Stopwatch.StartNew();
LuaState env = new LuaState();
var token = env.DoString(m_Lua);
m_LuaRuntime = string.Format("Lua 耗時:{0} ms 傳回值 : {1}", watch.ElapsedMilliseconds, token != null && token.Length > 0 ? token[0] : "null");
}
{
CLS_Environment env = new CLS_Environment(new ScriptLogger());
env.RegType(new RegHelper_Type(typeof(GameObject)));
var token = env.ParserToken(m_CLS);
var expr = env.Expr_CompilerToken(token, false);
watch = Stopwatch.StartNew();
var value = env.Expr_Execute(expr, null);
m_CLSRuntime = string.Format("cls 耗時:{0} ms 傳回值 : {1} (因聽說CLS解析很慢 故只計算Expr_Execute的時間)", watch.ElapsedMilliseconds, value);
}
Test1: 測試指令碼自運算效率(測試結果: lua的自運算能力是最快的 畢竟是c實現的底層 而且號稱世界最快的指令碼引擎)
<ignore_js_op>
Test2:測試調用c#函數以及建立對象的效率(測試結果:ulua在調用c#函數的時候畢竟要先把對象序列化成table調用 所以比較耗時 sco和cls是直接調用的反射或者快速反射一類的 沒有序列化的過程 所以可以彌補一些自運算帶來的損失 )
<ignore_js_op>
Test3:測試調用c#深層變數的效率(測試結果:ulua在深層調用上沒有想象的 掉的厲害 應該有對一個Type的序列化有緩衝)
<ignore_js_op>
結果:
ulua 在自運算比較多的情況下還是很佔優勢的 畢竟是c語言的底層 而且熟知lua的人很多 論壇,教程都不少 在入門方面還是很佔優勢的
缺點是 出了BUG比較麻煩 ,而且出了BUG大多都是記憶體方面的 會導致應用程式直接崩潰 BUG不好追蹤 平台方面支援 Windows,android,IOS 不支援WP 如果要做WP版本估計要費一番功夫
cls 文法同c# 優勢很明顯 如果怕某一塊代碼效率不行 或者相對比較穩定 不多動的代碼 可以直接轉成c# 效率立馬就恢複了 而且不用擔心出BUG 而且是c#語言寫的 出了問題也能快速定位(平台支援 Windows,Andoird,IOS,WP等 要發布別的平台還是比較方便的)
缺點 效率好像有點問題
sco 測試結果效率還行,源碼工程比較小,dll支援72K 源碼很容易看懂 有點工作經驗的 有個半天應該就可以看完了 而且是c#語言寫的 出了問題也能快速定位 (平台支援 Windows,Andoird,IOS,WP等 要發布別的平台還是比較方便的)
缺點 文法類似javascript 而且有部分文法不相同 語言基礎人數比較少
總結:三種指令碼各有各的優勢,畢竟只是指令碼,不用太在乎效率,也不會有人拿指令碼寫一個遊戲,只是用來做一些配置還有UI的操作,這些代碼三種指令碼的效率都無傷大雅
關鍵在個人的喜好! 動態指令碼和靜態指令碼各有各的好處!
最後奉上測試源碼:https://github.com/qingfeng346/ScriptTestor
Scorpio-CSharp源碼地址:https://github.com/qingfeng346/Scorpio-CSharp
QQ群討論:245199668
熱更新指令碼C#light,ulua,Scorpio效能比較