2011-06-07 98 views
1

我正在處理的項目需要我暫時在緩衝區中存儲數百甚至數千個條目。簡單的方法是將每個條目存儲在NSDictionary中,並將所有條目存儲在NSArray中。每個NSDictionary包含大約十幾個對象(NSStrings和NSNumbers)。在整個操作過程中,NSArray及其字典仍留在記憶中,因此我的問題。NSDictionary和NSArray的內存佔用情況

這是一個昂貴的操作在內存使用方面,什麼是測試這個好方法?

+1

通過使用Apple的Core Data框架來存儲數據,您將獲得更低的內存使用量,即使只是暫時的。 – 2011-06-11 04:07:41

回答

2

儀器包含一個內存監控模塊。在樂器的左下角,點擊齒輪圖標,然後選擇添加樂器> Memory Monitory。 Apple's documentation應該可以幫助您瞭解如何使用儀器監視內存。另見this question

根據我的經驗,NSDictionary和NSArray在內存使用方面都相當高效。我已經寫了幾個應用程序,它們存儲了來自.csv或.xml文件的數千個鍵/值,並且隨着NSDictionary被填滿,內存使用量有一個相當線性的增加。我的建議是,如果您可以爲它們構建單元測試,則可以在某些角落案例中使用「樂器」分析器。

我不知道我明白你爲什麼要在NSDictionary和NSArray中存儲條目。

如果你想達到內存使用的上限,你可能需要考慮的一件事是將條目轉換成SQLite數據庫,然後索引你想查找的列。

編輯:如果你想深入瞭解iPhone的內存消耗,一定要檢查this question

+0

感謝您的回覆。過去我一直在使用儀器(並在發佈此問題之前)。不幸的是,它並不是最簡單的工具(或者解釋它產生的結果),但它確實最適合這一點。 – 2011-06-07 01:49:19

+0

如果您有蘋果開發者賬戶,請查看[去年的WWDC](http://developer.apple.com/videos/wwdc/2010/)關於儀器和優化ios上的內存。如果您快速瞭解儀器是如何工作的,那麼確實值得一看。 – retrodrone 2011-06-07 01:54:02

1

Apple的集合類比您或我創建的效率更高,我不擔心有數千個小條目的字典,請記住,將這些值添加到字典時不會複製,但鍵是。這只是說,只記得你需要什麼。