2013-10-07 215 views
5

我試圖圍繞一個問題繞過我的想法(在this question中沒有提到)。背景是:基於回合制的遊戲,使用cocos2d 2.0版開發,obj-c,沒有ARC,目前準備AppStore更新來解決一些iOS 7問題(我的,不是iOS7)。不斷增加的應用程序內存(IOAccelResource)

我自己的儀器,以及儀器,沒有泄漏,沒有遺棄的記憶,沒有......平坦的。這也是iOS 4,5,6.1下的情況。然而,在我提交之前的測試中,在設備上進行性能分析時,我看到每2分鐘增加1Mb,遊戲處於閒置狀態,即無任何用戶交互(請參見下面的圖片)。

enter image description here

我能看到的唯一事情是一代捕獲之間橫行此IOAccelResource類別。

  1. 你有什麼建議嗎?
  2. 我無法找到關於IOAccelResource的許多信息......你們中的任何一個人都能指引我正確的閱讀方向嗎?如果這確實與cocos2d相關,我不介意在那裏挖掘,但我不知道從哪裏開始尋找。
  3. 此外,我想運行「儘可能接近發佈」構建儘可能,並仍然能夠測量隨着時間的推移內存足跡。你能給我一個測量工藝尺寸的方法嗎?

    tia。

+0

我用C++和Objective C++編碼的Cocos2d-x 2.2遊戲有同樣的問題。無法確定它來自哪裏:( –

+0

@CoryTrese看到我的答案如下:從外部運行發佈和監控進程大小看,進程大小穩定...相同的代碼庫,相同的一切除外:沒有調試,優化大小和速度 – YvesLeBorg

+0

我面臨着同樣的問題,不同之處在於我使用了'OpenGL ES',因此,即使您已經刪除了'UIAccelerometer'和'Cocos2D'之間的關係,並且您觀察到了越來越多的分配圖,它讓我認爲即使使用OpenGL也沒有問題,現在你在下面的評論中提到的一件事是'DisplayLink',它可以是'Cocos2d'和'OpenGL ES的公共部分'用於渲染圖形到屏幕上,如果是這種情況,那麼iOS或樂器都會出現故障 – sam18

回答

1

裏卡多有一半的答案:殭屍對象是其中的一部分。你需要兩個殭屍啓用和一個附加的過程來獲得蠕變。

總結:

  • 沒有殭屍,無記憶蠕變。
  • 與殭屍,沒有附加調試過程,沒有記憶蠕變。
  • 與殭屍,附加調試過程,內存蠕變。
+0

我敢肯定,我已經體驗了內存蠕變的版本編譯生成沒有附加調試過程(使用[此方法](http://stackoverflow.com/questions/7989864/watching-memory-usage-in- ios)進行內存報告)。另外,爲什麼你不編輯你以前的問題,而不是添加一個新的問題? –

+0

在我們的上下文中可能有些不同:我主要對所有UI的東西使用cocos2d。我已經離開了一個應用程序昨天運行了幾個小時(沒有殭屍,調試附加)沒有任何蠕變。爲了確定我已經使用cocos2d來整個報告過程大小,並與儀器進行比較(Monitor,不附上)。真的很奇怪這件事。 – YvesLeBorg

1

受過教育的猜測:IOAccelResource可以被UIAccelerometer使用。它聽起來像是一個加速度計I/O類的東西。

由於UIAccelerometer在iOS 7中已被棄用,但仍被cocos2d使用,可能蘋果沒有捕獲或關心這個問題。只是爲了測試,嘗試從cocos2d中刪除任何UIAccelerometer引用,看看它是否消失。發佈版本不應該影響儀器內存監控,而存檔版本只是代碼角度的發佈版本。

+0

hmmmm ...很好的ewag!我會給它一個搖一搖,然後很快回來 – YvesLeBorg

+0

PS:也許這是所以有點相關:http://stackoverflow.com/questions/13231570/is-it-normal-that-my-cocos2d-app-increase-real-memory-usage-every-second至少它似乎表明這可能是與cocos2d的開/關問題。我當然看到過這種行爲,但不是在每個應用程序中。 – LearnCocos2D

+0

好的...我修改了cocos2d以刪除任何和所有對加速度計類的引用(僅在CCLayer中)...沒有區別。現在調查可能的其他原因:儀器。 – YvesLeBorg

1

您可以嘗試使用通過儀器進行堆積分析來監測分配。這應該給你一個關於額外內存在哪裏被分配的指示。也許你已經試過了?

+0

hmmmm ....我在mil-std-xcode5樂器中尋找'堆鏡頭',但沒有找到它(某些其他線程提到過)。它是什麼工具,我該如何「揭開」那件事? – YvesLeBorg

+0

是的,他們已經改變了XCode5的術語。 Heapshot分析現在稱爲「Generations」,現在將「Heapshot」視爲「Mark Generation」。這是你想要的Allocations樂器。點擊您在屏幕截圖中看到的「統計」的位置即可瀏覽到「世代」頁面。 –

+0

爲'xcode'課程+1。 fyi:蠕蟲的86.3%是IOAccelResource,深入CS :: Display :: DisplayLink :: dispatch_item。其餘的是我自己的東西,目前正在仔細調查。此外,如果我用AppCode(相同的方案,相同的構建配置)構建,並通過IDE運行儀器,我也沒有蠕變。另一方面,如果我將儀器附加到正在運行的過程中,我會發現蠕變。 – YvesLeBorg

2

據我所知,這是一個虛假(可能的儀器錯誤)。當使用相同代碼庫的「釋放」版本...即不調試...並監視進程大小(即沒有調試進程附加到正在運行的進程)時,內存蠕變不存在。

+0

對我來說情況並非如此。我遇到了這個問題,我在發佈時運行,沒有將調試進程附加到正在運行的進程中,進程大小仍在增長。最奇怪的是,我的一些團隊成員獲得了它,而另一些則沒有。我認爲這與OpenGL有關,你們是否在使用它? –

+0

嗯,進一步調查'編輯計劃>運行>診斷''啓用殭屍對象'造成這種情況。 –

+0

這對我來說是新的。我每天都會驗證只有在調試時運行(並且只有)內存蠕變。例如,用xcode構建和運行,蠕變。停止xCode內的進程,並重新啓動應用程序(相同的版本)在設備上,不蠕變。使用GL-2,這是一款使用cocos2d構建的遊戲應用程序。但我看到與我的普通香草UIsomething應用程序相同的證據。 – YvesLeBorg

1

Edit Scheme > Run > Diagnostics上的Enable Zombie Objects選項可能導致此行爲。如果啓用它,請務必將其禁用。

+0

請參閱下面的完整答案。感謝downvote。 – YvesLeBorg

相關問題