2018年10月30日 星期二

dotTrace Find the Cause of a UI Freeze

dotTrace 學習心得

Find the Cause of a UI Freeze

  1. 選擇不需要的Thread,將它從我們的列表上移除。這邊選擇的方式是吃經驗值的,你必需知道你用了一個Background,所以會有一個Thread Pool的資料。你知道Finalizer是程式關閉的所以不用注意。你也裀道Garbage Collection是處理記憶體管理的,所以你可能要先留著,不要移除。
  2. 觀察Thread Pool的Thread,這是Background工作用的Thread。可以發現有短暫的暫停,
  3. 除了Thread Pool的時間Bar外,還可以觀察兩個額外的Bar,一個是UI Freeze的Bar(看上面的符號應該是紫色的),這是當UI的Message Pumping在200ms沒有作動時,就會開始產生。另外一個是GC發生的Bar(從上面的符號看應該是土黃色)
  4. 直接從UI Freeze Filter上面點選,表示要看整個UI Freeze的區段
  5. 先觀察是不是GC Block造成的。先從Event上選擇 Garabage Collection再選下面SubSystem的Blocking就可以查看因為Blocking造成的時間。若是時間很短,再查別的。

重要Panel意義

Call Tree

指定的Thread裡所呼叫的方法樹。會從最上層的呼叫一路列下來。可以從這裡觀察方法的呼叫階層及在特定階層時,該方法及其子方法的所需時間

Call Stack

列出指定Thread裡所有被呼叫的方法。會將所有的方法整合在一起,沒有誰呼叫誰的關係。系統會自動將時間佔據最久的放在最上面。

Call Tree vs Call Stack

可以想成一個是方法的TreeView,一個是方法的ListView

Interval Filters

  • 所謂的Interval Filters就是將特殊事件發生時的時間收集起來。
  • 當點選UI Freeze Filter時,會自動在Thread Bar上框出此種事件發生的時間點,也可以觀察到它是間斷發生的。
  • 若點選UI Freeze Filter及其他Filter時,就代表在UI Freeze 下又執行其他Fitler的狀態。

沒有留言:

張貼留言