10

我最近開發的應用程序非常頻繁地處理大量數據(每分鐘約15次)。爲此,我分配了一大塊內存,然後爲每批數據釋放它。Spiky Memory對於應用程序「健康」嗎?

這裏是我的內存分配的屏幕從儀器: The memory

的內存使用量從約3MB很快振盪至30MB左右。我只是想知道,iPhone本身是否「健康」。

這麼快分配和釋放這麼多內存有風險嗎?這是不可持續的,還是隻是不好的做法?

謝謝!

+0

出於興趣,什麼樣的處理導致穗?它是圖像處理嗎? – 2011-01-30 19:13:50

+0

是的,圖像分析實際上,你怎麼知道的? – pop850 2011-01-31 00:54:45

回答

7

既不危險也不一定是壞習慣。分配和釋放內存需要時間,因此要頻繁地執行而不是重複執行一次,並重新使用分配的內存,這是在內存使用效率(在每一時刻使用最低內存量)和性能之間的折中。

如果您的應用程序的性能目前沒有受到影響,那麼您可能爲您的應用程序的這種折衷做出了正確的選擇。

一般來說,對於較舊的設備(iPhone 3G及更舊版本),使用30 MB的內存相當大。你不能確定你的應用程序有多少內存可用,所以要準備好接收內存警告。如果您的應用程序在收到內存警告時無法減少其內存使用量,則操作系統可能會終止它。

-1

這取決於,如果用戶有iPhone 4或iPhone 3GS它應該是可行的,但在iPhone 3G上它會很快導致內存警告。 iPhone 4擁有256mb的應用程序RAM(總共512 MB) iPhone 3GS擁有128mb的應用程序和總共256個 iphone 3g只有128mb和64mb的應用程序..通常有大約40MB空閒應用正在運行。

蘋果說,你應該只分配你真正需要的內存,並儘量不使用自動釋放太多,因爲自動釋放給了我們一個對象被分配,而我們 並不真的需要它了

如果性能不算太差,我會嘗試使用更少的內存,並在您真正需要時分配更多內存。

+0

實際上,您應該使用autorelease對象並在必要時使用它們。 – koo 2011-01-30 15:07:35

4

我在這些情況下主要擔心的是碎片。如果大塊的大小相同,你應該沒問題(並且看着你的圖形,峯值看起來完全是水平的,所以我認爲是這種情況)。

您將支付分配費用,但正如Ole所說,如果您的應用程序已經運行良好,那麼嘗試優化它就沒有多大意義。