2013-03-05 71 views
2

我的應用程序有時會經歷2-10秒的延遲,同時在複雜的視圖中拖動對象。在某些情況下,延遲足以導致出現等待光標(死亡旋轉披薩)。如何診斷拖動過程中的意外延遲?

時間事件探查器沒有發現任何非常顯着的事情 - 只是預期的繪圖調用會在對象被拖動時更新視圖。 (這是很多計算,但我在暫停期間和暫停期間看到配置文件沒有明顯差異。)

內存分析器顯示暫停沒有什麼特別的。分配在整個阻力中似乎是平坦的。泄漏很乾淨。 (我最初的假設是我旋轉了太多的自動釋放對象,但這似乎不是問題。)

活動監視器指出,在拖動過程中我幾乎用盡了一個核心重繪。這就是我所期望的。

關於下一步看什麼的任何想法?

+0

任何機會的任何代碼路徑接觸磁盤? – joerick 2013-03-05 22:59:13

+0

或者如果您的內存使用率很高,某些應用程序內存可能已換出到磁盤,則需要一段時間才能再次訪問它... – joerick 2013-03-05 23:01:17

+0

暫停從2秒到10秒 - 我認爲這就是真的太長時間了,即使是大型虛擬機的命中。活動監視器不顯示任何磁盤使用率峯值。 – 2013-03-06 01:00:44

回答

0

嗯。那麼也許你可以試着運行Instruments.app並啓用'Record Waiting Threads'。這會告訴你代碼在等待和運行的地方。你可能會坐在信號燈下或者做一些IO--會以這種模式出現。

Instruments