2011-06-07 27 views
0

我處於我的iPhone遊戲開發的最後階段:優化和性能調優。 我的問題是,遊戲在iPhone 4和iPad上運行的非常流暢,但由於內存不足,它經常在iOS 3.1.3的iPhone 2上崩潰。iPhone內存使用優化/性能調整

我已經通過了所有的內存泄漏檢測/清理過程,並且除了系統庫中的內容外,Xcode儀器顯示沒有泄漏(參見以下屏幕截圖)。我也很少使用「autorelease」。

(大局觀:click hereLeak detection result

我也用異形「CPU採樣器」和「分配」我的應用程序,而是以結果有點困惑。這是由「分配」標杆結果:

(大局觀:click hereAllocations Benchmark

這是一個博弈之後的結果。正如你所看到的,「Live Bytes」只有3.93MB,根據我的理解,這應該不是什麼大問題 - 但是這款遊戲通常會在iPhone 2,ios 3.1.3上崩潰。

我也做了一個 「CPU採樣」 的基準,以下是結果:

(大局觀:click hereCPU Sampler Result

什麼困惑我的是,真正的記憶顯示 「22.32MB」 和虛擬內存大於100MB,這與「分配基準」的結果有很大不同。

我也很困惑,我的iPhone 3G,運行iOS 4.1,即使它有幾乎完全相同的硬件規格與iPhone 2,可以很好地運行我的遊戲。速度很慢,速度並不快,但很少崩潰。

所以我的問題是:

  1. 我還有什麼可以做,以確定在iphone 2低內存問題?
  2. 系統庫泄漏「泄漏」分析會導致問題嗎?
  3. 爲什麼「CPU採樣器」和「分配」顯示不同的內存足跡?我讀了他們正確嗎?
  4. 爲什麼iPhone 3G運行比iPhone 2G更流暢?是否因爲更新的iOS版本(4.1 vs 3.1.3)?
+0

您的內存使用情況顯示了一些公平的漏洞,我肯定會將此作爲開始。 – Devraj 2011-06-07 22:31:51

+0

感謝提示,Devraj! 「泄漏」概要分析結果中的許多條目顯示「沒有可用於此塊的堆棧跟蹤」。任何想法如何追查這些問題? – 2011-06-08 18:01:09

回答

0

1.我還能做些什麼來確定iPhone 2上的低內存問題?

在iOS模擬器中運行您的應用程序,並使用硬件菜單項「模擬內存警告」項觸發您懷疑會崩潰的地方的內存不足事件。

在真實設備上測試您的應用程序,但在啓動之前儘可能多地啓動其他應用程序以減少可用內存量。在運行你的應用程序時,切換現在然後回到應用程序網格,以(重新)啓動其他應用程序。這樣你會使系統產生真正的內存不足事件,但是你不能選擇哪個應用程序會接收它們。

你可以自己生成OOM事件,但是你會運行一個不同的應用程序。在開發時可能有用,但在接近發佈時不推薦。非常煩人的調試由於調試「幫手」例程造成的錯誤...

2.系統庫泄露「泄漏」分析結果是否有問題?

他們可能是你的代碼的副作用。查看應用程序的哪個部分可能會啓動該系統服務,以及是否釋放/取消/關閉所有內容。

3.爲什麼「CPU採樣器」和「分配」顯示不同的內存足跡?我讀了他們正確嗎?

不知道,但想知道:)

4.爲什麼iPhone 3G運行了很多比iPhone 2G更柔順?是否因爲更新的iOS版本(4.1 vs 3.1.3)?

iPhone 3G比iPhone2擁有更好,更快,更硬件的硬件。因此,應用似乎運行速度更快......如果您的應用在速度更快的硬件中運行速度過快,這可能會造成問題。確保你的應用程序以「恰到好處的速度」運行,而不管硬件是不同的問題。

+0

對不起,但您的答案4完全錯誤。除了3G無線電,iPhone 3G和2G擁有完全相同的硬件。相同的CPU,相同數量的RAM,一切。也許在RAM速度方面存在一些細微差別,但它們都是針對所有意圖和目的的同一個設備。你必須將它與3G-S相混淆,它具有兩倍的內存和更快的處理器。 – 2011-08-11 22:50:00