1. 程式人生 > >Unity3D學習筆記(4)——獲取單幀中函式耗時

Unity3D學習筆記(4)——獲取單幀中函式耗時

Unity3D學習筆記(4)

參考連結1
參考連結2

CheckFunctionTimeInSingleFrame.cs

namespace Assets.Scripts
{
    using UnityEngine;

    public class CheckFunctionTimeInSingleFrame : MonoBehaviour {

        // Use this for initialization
        void Start () {

            float t = Time.time;
            TestTimeFunction();
            UnityEngine.Debug.Log(string
.Format("Function CostTime:{0} ms", Time.time - t));//得到結果為0,因為Time.time每幀重新賦值之後才會更新一次 System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); //開始測量 TestTimeFunction(); sw.Stop(); UnityEngine.Debug.Log(string.Format("Function CostTime:{0} ms"
, sw.ElapsedMilliseconds)); //列印測量的時間 單位:毫秒 } void Update() { //定位效能熱點 這樣就能在Profiler介面檢視到函式的效能消耗——在Update中消耗較為直觀,能在Profiler介面檢視動態消耗變化 UnityEngine.Profiling.Profiler.BeginSample("TestTimeFunction"); TestTimeFunction(); UnityEngine.Profiling.Profiler.EndSample(); } private
void TestTimeFunction() { for (int i = 0; i < 666666; ++i) { //do sometihing } } } }

注:

  1. 在插入效能取樣程式碼時,特別留意函式中是否存在多個return的現象 。這些return如果沒有處理好,就有可能導致效能取樣的Begin和End不匹配,導致Profiler顯示的結果有誤。
  2. 對於協程函式,BeginSample、EndSample之間注意不能存在yeild return null ,否則可能導致Unity客戶端卡死、手機卡死等現象。個人分析:Begin和End配對分析的是單幀結果,出現yeild return null代表該區間將會分兩幀甚至多幀完成。