2012-08-01 65 views
-1

我們在第一代iPad上使用配置文件工具測試了我們的應用程序,該工具在iPad上使用了大量內存,發現我們的應用程序緩慢地釋放了內存(花費更多超過1分鐘才能釋放20 MB)。但是,在我們的代碼中,我們正確地釋放了內存。然後,我們監控了一些專業的第三方應用程序(Chrome和Flipboard),並注意到這些應用程序也具有相同的釋放速率。奇怪的iOS內存管理經驗

iOS或iPad 1是否有緩慢的內存釋放問題,或者探查器是否會干擾iOS的內存釋放?

我們使用最新的iOS版本。是的,在現實世界中,我們應用程序的性能將受到內存緩慢釋放的影響

我們通過加載應用程序並等待內存穩定然後加載媒體或視圖並等待來測量釋放速率爲了穩定下來,我們回到原始視圖,看看如何取消分配先前的視圖/媒體。其速度(每1分鐘少於20 MB)。該應用程序將永遠不會回到原來的內存使用情況,即在啓動視圖中打開應用程序並等待其穩定後的使用情況。

+1

「慢釋放」是什麼意思?應用性能受到影響?你在iPad上運行的是哪個版本的iOS? – JeremyP 2012-08-01 15:42:43

+2

你是如何測量釋放率的? – bbum 2012-08-01 16:00:19

回答

0

如果你在需要的時候釋放內存(也就是儘量減少分配內存的時間),那麼你不必擔心「慢釋放」(無論這個無意義的詞是什麼意思)。

不要高估Profiler的能力。

+3

@MHHappyOne:這不是對內存管理如何工作的準確理解。這個級別的硬件沒有涉及分配。您可能會看到autorelease池中的工件,或者來自正在進行自己生命週期的框架的分配。 – 2012-08-01 15:57:49

+1

@quixoto我們正在釋放,我認爲Flipboard和Chrome也是。釋放過程非常緩慢。 – MrHappyOne 2012-08-01 16:01:47

+1

@quixoto硬件確實在內存管理中發揮作用,特別是在使用DDR1內存時。然而,iOS似乎是管理內存分配和釋放的問題,但正如我之前所說的,我們正確地釋放分配,並且我認爲Chrome和Flipboard也是如此。 – MrHappyOne 2012-08-01 16:08:24

1

我們通過加載應用程序,並等待穩定存儲器中,然後裝入介質或視圖和等待,要穩定,然後我們再回到原來的觀點,看看如何加載它需要測量釋放率解除分配先前的視圖/媒體。

這不是一個有用的基準。好的,所以你分配了一些內存。然後你告訴操作系統,你不再需要它了。迄今爲止很好。除非需要其他地方的記憶,否則通常不會做太多的工作。保留緩存更有意義,這樣如果您再次需要緩存,則可以更快地使用緩存。您沒有測量任何有用的東西 - 您正在測量系統在其他地方需要存儲器需要多長時間,而不是需要多長時間才能釋放該存儲器。常識應該告訴你一分鐘釋放20MB是不正確的。

我建議你拿出一個基準來衡量你對實際上感興趣。你的應用程序如何受緩慢的釋放影響?你確定你不是無意中將它用作你真正感興趣的因素的可靠替代品嗎?

+1

同意。我認爲MrHappyOne正在使用Activity Monitor工具來衡量使用情況。這裏列出的內存並不特別有意義。 Allocations更有用和更有意義的工具。如果這需要很長時間才能實現,那麼您的代碼中可能存在實際問題(或者在WebKit等高級庫中)。您對操作系統級內存管理的討論(即操作系統不會快速回收內存,除非它需要它)是點亮的。 – 2012-08-01 16:36:04

+0

我們做了其他一些內存測試,但是我不想在我認爲已經死亡的問題中添加太多的信息。由於內存問題,我們的應用程序經常崩潰,並且當需要防止崩潰時,iOS無法釋放足夠的內存。我們的一些測試有很高的內存壓力,iOS未能釋放。我將在iPad 2上測試我們的應用程序和其他應用程序,並查看是否獲得相同的結果。另外請記住iOS分析器利用了很多內存。 – MrHappyOne 2012-08-01 16:41:09

+0

難道這不僅僅是因爲你使用的內存太多嗎? Apple告訴你在使用內存方面非常保守,iOS不保證你的應用程序有任何特定的內存容量。任何給定的應用程序都無權使用所有可用內存。如果你確信iOS沒有在應有的時候分配你的內存,我建議你使用技術支持事件與Apple討論。 – Jim 2012-08-01 16:51:44