我想在一幀內(nèi)獲取某個(gè)方法的總執(zhí)行時(shí)間。開(kāi)始想用Time.time減去之前保存的時(shí)間。但是發(fā)現(xiàn)在一幀內(nèi)永遠(yuǎn)返回的是0,多幀的話可以,看來(lái)Time.time只會(huì)在每一幀賦值更新一次,所以一幀內(nèi)的就取不到了。
然后查了一下c#有一個(gè)Stopwatch的類可以幫我們記錄時(shí)間,使用起來(lái)也挺便利的。。
using UnityEngine;
using System.Collections;
using System.Diagnostics;
public class NewBehaviourScript : MonoBehaviour {
void Start () {
float t = Time.time;
TestMethod();
UnityEngine.Debug.Log(string.Format("total: {0} ms",Time.time - t));
Stopwatch sw = new Stopwatch();
sw.Start();
TestMethod();
sw.Stop();
UnityEngine.Debug.Log(string.Format("total: {0} ms",sw.ElapsedMilliseconds));
Profiler.BeginSample("TestMethod");
TestMethod();
Profiler.EndSample();
}
void TestMethod()
{
for(int i =0; i < 10000000; i++)
{
}
}
}
Stopwatch就可以正確的取到上一個(gè)方法所消耗的時(shí)間。如果想同時(shí)測(cè)試多個(gè)方法,可以多次調(diào)用 sw.Reset(); 然后sw.Stop取ElapsedMilliseconds毫秒數(shù)即可。當(dāng)然也可以用 Profiler.BeginSample 和Profiler.EndSample 但是就是要打開(kāi)Profiler界面找到那一幀就可以看了。