簡體   English   中英

儀器:檢查 memory 泄漏查詢

[英]Instruments: checking for memory leaks inquiry

我很好奇,當一個人繼續執行他們的代碼以使用 Instruments 進行泄漏檢查時 - 手動點擊應用程序的所有部分以確保 memory 泄漏發生在相應區域是否謹慎? 例如,我相信我的應用程序中有一些 memory 泄漏,在 UINavigationController 樹的深處。 我是否提前 go 並運行應用程序檢查泄漏,同時在 iPhone 上手動向下鑽取以到達應用程序的該部分? Instruments 是否足夠聰明,可以自己找到它? 正確的方法是什么?

感謝您的任何見解!

不,Instruments 只是監視代碼的 memory 分配,它不會“去”任何地方,除非你的應用程序去那里。 實際上,泄漏只不過是 memory 的一塊,不再存在參考; 因此它不能再被釋放,因為如果你甚至不能再引用它,你將如何釋放它?

不過,儀器不會以這種方式發現所有 memory 泄漏。 如果您保留對 memory 的引用,請不要使用它們來釋放 memory,Instruments 不會將此視為泄漏,因為它無法預測您是否會在將來釋放它。 由於您仍然可以釋放它,因此它不被視為泄漏。 因此,如果您有 memory 問題,那么不僅要查找泄漏,而且還要監控您的應用程序在一段時間內“收集”了多少 memory,這可能是有益的。 如果即使它不應該永久上升,您可能仍然有泄漏,只是沒有丟失對 memory 的引用。

通常,我會關注可能導致泄漏的模塊,然后再擴大 scope。 雖然我沒有在 Mac 上使用 Instruments,但我使用 Purify 和原生 Windows 堆工具在 Windows 程序中進行 memory 泄漏跟蹤。

在您確定了主要泄漏的來源之后,使用不同的測試輸入運行程序並通常檢查程序是否存在其他泄漏從來都不是一個壞主意。 即使是特定數據集的小泄漏也可能導致更大的泄漏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM