2011-08-30 64 views
3

好的,所以這是我的問題,我很抱歉,如果它的重複。我搜查了但找不到任何我認爲相關的東西。使用大量內存的Xcode儀器。

當我從xcode運行儀器並開始測試我的應用程序內存泄漏或分配時,我的iMac最終開始非常緩慢地運行。

這使我在使用樂器時運行活動監視器,並且我注意到每秒鐘的樂器都處於打開狀態,它佔用了越來越多的真實內存。大約100MB的秒。

它消耗所有iMac可用內存(2gbs)並不需要很長時間,然後開始滯後。

總之,這不會發生在每個應用程序。我已經對我下載的一些應用程序/項目進行了相同的測試,儀器似乎只使用了大約250mb的空間,並且不會顯着增加。

有什麼明顯的,我做錯了嗎?任何幫助,將不勝感激。

謝謝。

回答

4

樂器消耗大量內存。

根據您正在錄製的內容,您可能會減少內存使用量。例如,您可以經常指定要記錄的內容(或不記錄的內容),或者降低採樣頻率(如果適用)。

100MB/s異常高。你能否更準確地描述你在那段時間錄製的內容? (你使用的儀器,你記錄的過程在做什麼等)。

Xcode 3使用的內存少得多 - 不知道這是否也適用於儀器。

通過將工具集作爲32位進程運行,可以稍微減少內存使用量。

最後,2GB物理內存對於Xcode + Instruments + iOS Sim來說並不算什麼。 fwiw,我經常耗盡8 GB或更多的物理內存。噓。幸運的是,當你想要4或8GB時,內存很便宜。

更新

我試着用儀器進行分配,泄漏和殭屍

你可以,如果你必須單獨運行這些測試。

分配

就其本身而言,如果您的應用程序也沒有創造很多分配的分配應該不消耗一噸的內存。

爲了減少內存使用這種儀器,就可以禁用某些選項,你有沒有興趣:

  • 不記錄每個裁判計數操作
  • 只跟蹤活動allocs
  • 禁用的殭屍檢測
  • 不識別C++對象

泄漏

  • 意味着分配儀器只有當你想泄漏的歷史。

泄漏檢測本身會消耗大量內存,因爲它會掃描內存,基本上克隆您的分配。假設你有100MB分配 - 泄漏將定期暫停進程,克隆內存並掃描它的模式。這會消耗比你的應用程序更多的內存。 iirc,它是作爲儀器的一個子進程執行的。

殭屍

  • 意味着分配儀器。

殭屍檢測通常意味着參考計數記錄。在調試殭屍時,從不釋放它們是最有效的。如果你釋放他們,你可能只能檢測到暫時的殭屍(不知道是否有一個選項,在儀器......)。永遠不要釋放objc分配顯然會消耗更多的內存。在進程上運行泄漏會消耗更多的內存,因爲你的堆大小會更大 - 不應該將泄漏和殭屍結合起來。

您應該可以通過禁用這些選項中的一部分並單獨對它們進行測試來減少總體消耗。

注意

  • 的前沿開發工具版本可真是搖搖欲墜。如果遇到問題,堅持正式發佈會有所幫助。
  • 我可以單獨運行一個osx單元測試(主要是c/C++ apis),它在錄製時消耗約1MB/s。有些東西似乎是錯誤的,但也許這表明你的程序存在問題(很多瞬態分配?)。
  • 改變數據顯示方式和/或充電/焦點設置可能需要大量內存。例如「全部恢復」可能需要幾GB來處理大量樣本。
  • 如果100MB/s是一個準確的數字,我會提交一個錯誤。我知道樂器消耗大量內存,但對於錄製閒置應用程序來說,這非常高,即使期望樂器消耗大量內存。

好運

+0

我試着用儀器進行分配,泄漏和殭屍,它似乎要消耗大約相同數量的內存不管。 一旦儀器達到約1。7GB似乎停止了,但是在那個時候,它對我的​​遊戲進行了適當的測試。 我對自由內存有點不清楚。我的意思是我在第一次啓動儀器時有2GB的空閒空間,這意味着xcode和模擬器應該包含在內。我有4GB的總數,它是一款相當新的iMac。 我正在運行的只是我的iPhone遊戲。我什至不需要做任何事情。只需坐在第一個菜單屏幕上即可。 – Tasik

+0

我知道我的舊iMac沒有Xcode 3這個問題。但我不確定它的Xcode或我對我的遊戲進行了更改。 但我會嘗試一些東西+你的建議和回報。謝謝。 – Tasik

+0

我已升級到12G的RAM。它似乎一直保持100MB的速度,一秒鐘內需要花費大約一分半的時間才能消耗10GB的存儲空間,然後再次變得非常慢。無論如何非常感謝你。如果我想出其他東西,我會補充一點。 – Tasik