2010-05-19 37 views
2

我的應用程序出現問題,需要顯示大量圖像和視頻。640Kb活動字節的低內存?

運行ObjectAlloc工具後,我看到活動字節爲640Kb,應用程序崩潰時整個內存爲31,54Mb。

在主辦單位,我收到了「內存不足」的報告,所以我猜的應用程序崩潰,因爲內存不足而ObjectAllocation數據沒有任何意義,我...

任何想法?

這是主辦方崩潰日誌:

Incident Identifier: CDCAF38C-CFFD-4316-9C4A-5C8E37794B49 
CrashReporter Key: 65390aeb97b2b81076576c3e33b025feb5db9202 
OS Version:   iPhone OS 3.1.3 (7E18) 
Date:    2010-05-19 10:07:19 +0200 

Free pages:  372 
Wired pages:  12260 
Purgeable pages: 0 
Largest process: DTMobileIS 

Processes 
     Name     UUID     Count resident pages 
     ATreeTest <1d51c3a5fef8b747c3a1be9405bdd52a> 1150 (jettisoned) (active) 
     DTMobileIS <69c3fa96db2f29474d62964aa1a69bfa> 3316 
notification_pro <8a7725017106a28b545fd13ed58bf98c>  68 
    mediaserverd <3d3800d6acfff050e4d0ed91cbe2467e>  464 (jettisoned) 
     syslogd <8eddddc00294d5615afded36ee3f1b62>  56 (jettisoned) 
      apsd <32070d91b216d806973c8f1b1d8077a4>  173 
    SpringBoard <324939a437d1cca1fa4af72d9f5d0eba> 2475 (jettisoned) (active) 
     accessoryd <8f21c8b376d16e2ccb95ed6d21d8317a>  99 (jettisoned) 
notification_pro <8a7725017106a28b545fd13ed58bf98c>  64 
      ptpd <f5e735bffd0557fcdc53cb35b6d9ce66>  129 
     notifyd <591dd4dd804b4b8741f52335ea1fa4ab>  64 
     CommCenter <b4b87526ae086bb62c982f1078f43f81>  167 
     configd <85efd41aceac34ccc0019df76623c7a9>  294 
     fairplayd <a2eaf736b3e07c7c9a2c82e9eb893555>  91 
    mDNSResponder <df1cd275e4ad434e0575990e8e1da4cb>  101 
     lockdownd <80d2bd44c0bcca273d48ce52010f7e65>  285 
     launchd <a5988245aade809bf77576f1d9de42c5>  71 



**End** 

回答

7

ObjectAlloc儀表不顯示你的應用程序的完整內存使用情況,特別是如果你有很多,你正在處理的用戶界面元素。爲了更準確地讀取應用程序在任何給定時間的總內存空間,請使用Memory Monitor設備。您將看到您的應用程序的確超出了設備上的內存閾值。''

您可以通過單擊Instruments中工具欄上的庫按鈕來添加Memory Monitor儀器。出現所有可用樂器的列表,然後將Memory Monitor拖放到主窗口的樂器區域。

如果您將Memory Monitor儀器與ObjectAlloc一起使用,您應該能夠跟蹤應用程序中觸發內存尖峯的內容。選擇內存監視器的Track inspection head選項(在儀器列表下方;先點擊內存管理器激活該工具,這些選項將出現在底部窗格中),以查看其執行過程中任何時候記錄的應用程序內存大小。

+0

好的謝謝 - 偉大的提示。真正的內存始於137MB負載而無需執行任何操作。這真的很對嗎?所以現在我正在使用Allocations,然後是CallTree子部分。我終於看到符合137MB的數字。我向下看到調用樹時,內存部門的所有重擊者都是這些渲染類,它們會吐出圖像。我正在使用CGContextRef和繪圖等等,然後在最後吐出並返回一個UIImage * img = [UIImage imageWithCGImage:imageMasked]並釋放一切。 – 2010-09-19 02:03:05

+0

我不明白這是否準確。其他答案認爲,'真正的內存'包括已經發布的內存塊,但操作系統還沒有回收(參見http://stackoverflow.com/a/8797272/287403)。那麼正確與否?我應該擔心在存儲器監視器中的對象分配中的10MB「實時字節」還是我的80 + MB「實際存儲器」? – 2012-03-12 01:20:17

+0

@BobSpryn - 我可以從經驗告訴你,Memory Monitor報告的內存使用情況看起來非常漂亮。在較舊的設備上,記憶警告在我跨過本儀器測量的某些閾值的瞬間觸發。我在這裏的答案中提供了有關分配和內存監視器儀器之間差異的更多解釋:http://stackoverflow.com/a/5627221/19679 – 2012-03-12 14:21:41