2012-01-09 6 views
10

私は、たくさんの小さなオブジェクトを作成して浮動小数点を使用するiOSアプリケーションで作業しています。消費しているメモリ量を知ろうとしています。ライブバイトとiOSのアクティビティモニターの実際のメモリ

"割り当て"の楽器を実行すると、約2MBの "ライブバイト"があると言われています。数字はアプリを移動するにつれてほぼ一定に保たれます(アプリがビジー状態のときは最大3MBほどスパイク、その後2MBに戻って低下します)。

しかし、私が "Activity Monitory"計測器を走らせると、アプリの "Real Memory"は起動が完了すると25MBとなり、CALayer内で描画が行われるたびに急速に成長します。 1分足らずで、100MB以上になります。

なぜ「ライブバイト」は2MBを表示しますが、「リアルメモリ」は100MBを表示しますか?

私のCALayerはトンパスのを描いている、それだけで、単一の描画操作を完了するために数秒間100%のCPUをペグ、そしてそれは、その後、するCGPoint値にNSDataオブジェクトのうち、これらの点のすべてをロードしています(NSDataオブジェクトは描画されるポイントの圧縮バージョンです。あるポイントから次のポイントへデルタを格納するので、私はRAMに保存しますが、実際のCGPointは保持しません)。

また、描画の結果をUIImageにキャッシュします。これらは、先入れ先出し配列で保持され、約500KBを超えないようになります。

答えて

11

私の問題は、NSZombieEnabledでした。

無効にするスキームの編集>実行>引数>環境変数は、余分なメモリの使用を解決しました。

13

実際のメモリ番号には、あなたのアプリが使用し、すでにリリースされているメモリブロックが含まれていますが、OSはまだ再利用や再利用に気をつけていません。ライブメモリは、あなたのアプリが動作していてメモリが逼迫している場合、あなたのアプリを殺さずにOSが取り戻すことのできない「汚れた」メモリです。

+0

ありがとうございました。たくさんの「ダーティー」なメモリを作成する際に、パフォーマンスに大きな問題があるかどうかは分かりますか?私は現在のメモリ使用量の約2倍を消費するだけで*ロット*ダーティなメモリを作成することができ、メモリが少ないという警告を受け取った場合、簡単に "ダーティ"な方法にフォールバックすることができます。私はRAMに250GBのデータベースの一部を選択的にロードしています。それ以上のものはRAMに収めることができますが、パフォーマンスとメモリの効率的な記憶が必要です –

+0

どこでもこのような良い答えは見られませんでした。それは知ることが本当に重要です。 –

関連する問題