26

計測器からのこのスクリーン ショットでわかるように、Allocations は私のアプリケーション (Ongo) が 7.55 MB のメモリしか使用していないと考えていますが、Memory Monitor は 53.30 と表示しています。さらに、空きシステム メモリは、アプリが使用しているメモリの量とほとんど、またはまったく相関関係がありません。これら 2 つのツールの間に大きな相違がある理由を知っている人はいますか? さらに、システム メモリ不足の原因を突き止めたり、システム メモリがすぐに不足しないようにする方法はありますか? 私のアプリはメモリ リークしているようには見えませんが、どういうわけかシステム リソースを使い果たしています。

ありがとう

楽器YU嘘?

4

4 に答える 4

31

これは、OpenGL ESからのメモリ使用量がObjectAllocから隠されているが、メモリモニターではカウントされているためだと思います。たとえば、ここでの彼の質問のzoulのテストを参照してください。ここでは、テクスチャの作成時にObjectAllocでわずかな上昇が見られますが、OpenGLESに渡されるとそのメモリはその機器から消えます。メモリモニターは、引き続きそのテクスチャメモリを追跡します。

CALayersは事実上OpenGLESテクスチャのラッパーであるため、これには、レイヤーやビューなどのUI要素の視覚的側面を含める必要があります。UI要素の実際の2D画像表現は、ObjectAllocによって追跡されていないように見えるため、ObjectAllocの合計値が低くなります。

ObjectAllocは、割り当ての数とタイプを追跡するのに依然として優れており、ヒープショット機能の登場以来、さらに価値があります。メモリーモニターと組み合わせて、実際の全体的なメモリー使用量を確認するだけです。

于 2011-04-11T20:34:03.213 に答える
5

2012 年以降にこの投稿を見た方へ:

デバイスの物理メモリに実際にロードされるメモリは、VM Tracker Instrument の常駐メモリです。

Allocation Instrument は、malloc/[NSObject alloc] と一部のフレームワーク バッファによって作成されたメモリのみをマークします。

WWDC 2012 Session 242 iOS App Performance: Memory を視聴して、Apple から情報を入手してください。

于 2013-08-22T01:59:00.863 に答える
3

メモリ モニターは、カーネル レベルで間接的に割り当てられたリソースを含め、アプリケーションが保持するほとんどまたはすべてのリソースをカウントします。これには、ブラッドが提案したようにAFAIKビデオメモリ(テクスチャなど)が含まれますが、メモリマップファイルと、ソケットなどの大きなカーネル構造も含まれます。リストはおそらくかなり長いです...

于 2011-04-14T15:56:32.657 に答える