string与stringBuilder的效率与内存占用实测
生活随笔
收集整理的這篇文章主要介紹了
string与stringBuilder的效率与内存占用实测
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
string與stringBuilder的效率與內(nèi)存占用實測
using UnityEngine; using System.Diagnostics; using System.Text; using UnityEngine.UI;public class simpleTest : MonoBehaviour {System.TimeSpan t1;System.TimeSpan t2;/// <summary> /// Main()會被UNITY調(diào)用!,只要名字是Main(),不管是public, static, void, int/// 當(dāng)進行大量字符串連接時,string是stringBuilder內(nèi)存占用的10倍以上,時間是其100倍以上/// vs2015控制臺字符串連接速度是UNITY中字符串連接的10倍!/// </summary>void Main(){//*****此函數(shù)會被自動調(diào)用!! 在Awake()和Start()之間*******//通過這段代碼對比可以發(fā)現(xiàn),在數(shù)據(jù)量比較大時,string要比StringBuilder要慢得多,同時占用內(nèi)存也大得多,數(shù)據(jù)越大差距越明顯//測試環(huán)境:UNITY5.3.5F, VS2015//測試數(shù)據(jù),10000次字符串連接//時間測試:UNITY5.3.5: t1 = 約1s, t2 = 約0.001s; VS2015: t1 = 0.08, t2 = 0.0001//內(nèi)存測試:僅在VS2015中測試:string方式:運行程序約占11M,stringBuilder一直約保持在1400k~1800kStopwatch swt = new Stopwatch();const int num = 10000;string[] arrs = new string[num];for(int i=0; i<arrs.Length; ++i){arrs[i] = (i * i).ToString();}swt.Start();StringBuilder sbd = new StringBuilder();for(int i=0; i<num; ++i){sbd.Append(arrs[i]);}swt.Stop();//UnityEngine.Debug.Log("stringBuilder: " + swt.Elapsed); t1 = swt.Elapsed;swt.Start();string s = "";for (int i = 0; i < num; ++i){s += arrs[i];}swt.Stop();UnityEngine.Debug.Log("string: " + swt.Elapsed);t2 = swt.Elapsed;UnityEngine.Debug.Log("ok");}void Reset(){UnityEngine.Debug.Log ("reset");}void Awake(){UnityEngine.Debug.Log ("awake");}// Use this for initializationvoid Start () {UnityEngine. Debug.Log ("start");GetComponent<Text> ().text = t1 + "," + t2;//Main (); }// Update is called once per framevoid Update () {} }?
在LUA中情況十分相似,在LUA中,字符串操作與C#完全一樣,每次操作都會產(chǎn)生一個新串,大量字符串操作同樣會產(chǎn)生大量內(nèi)存占用。
在LUA中使用table.concat()來實現(xiàn)C#中stringbuilder()的功能,使字符串連接速度提升,內(nèi)存減少。
經(jīng)測試,在LUA中直接的字符串連接與使用table.concat()字符串進行連接時間在10000次操作時是100:1,與上面C#的對比基本一致。
local strs = {} for i=1, 10000 dostrs[i] = tostring(i*i) endlocal str1 = "" print("---------------" .. os.clock()) --0.01 for i=1, 10000 dostr1 = str1 .. strs[i] end print("----------------" .. os.clock()) --0.139print("---------------" .. os.clock()) --0.139 local str2 = table.concat(strs) print("----------------" .. os.clock()) --0.141?
另外,10000次字符串連接測試,table.concat與?C#的stringbuilder()對比,時間占用 10:1。說明C#還是要比腳本語言效率高得多。
posted on 2016-10-24 15:43 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏
總結(jié)
以上是生活随笔為你收集整理的string与stringBuilder的效率与内存占用实测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】C#Static类和Static构
- 下一篇: C# LUA 闭包