2010-11-25 14 views
1

私は自分が割り当てた/ init/copyのすべてのオブジェクトを自動解放/解放しています。しかし...私のプログラムのメモリ使用量は増加を止めることはありません。私は割り振りのスクリーンショットを含めました(私は長い間割り振りを実行しましたが、それは比較的一定です...実際に実行したときにプログラムが得た金額とは比較できません)。しかし、私のプログラムはメモリを獲得し続けるだろうと私は分かりません。 。ときに実際に私が画像を投稿まだできませんので、ここで...メモリ管理で...割り振りにはリークはないが、プログラムのリークは狂気のように見える

を実行し、スクリーンショットへのリンクです:

allocations run

UPDATE:私のメモリヒープショット分析のスクリーンショットです...これらのオブジェクトを明示的に割り当てるのではなく、実際にどこから来ているのか分かりません。それらのほとんどすべては、右側の2番目のスクリーンショットの詳細(コールツリーのHTTPsとURLの多く)に似たものでソースを持っています。誰がどこから来たのか知っていますか?私はいくつかのNSURLConnectionのリークについて読んだことは分かっていますが、キャッシュのクリアを試してみてください。これまでのすべての助けをありがとう!

memory heap analysis 1

memory heap analysis 2

+0

ヒープショット1の位置をベースラインとし、その後にベースライン以外のヒープショットを取得するとどうなりますか?最初のスパイク後はかなり安定しています。 –

+0

私はそれを試して、あなたは正しいです、そのメモリはその後比較的安定しています。しかし、ヒープショットはほぼすべてではありますが、まだ小さいですが、同様のリークがあります。 – ambientdiscourse

答えて

2
+0

ありがとう、これをチェックします。 – ambientdiscourse

+0

ヒープショットはかなり役立っていますが、私はこれらの割り当てのほとんどがどこから来ているのかわかりません...私はそれらを明示的にしていません...私の質問を編集するつもりです。それ。再度、感謝します! – ambientdiscourse

+0

もう一度おねがいします...ヒープショットはこの問題を解決する手段でした。 – ambientdiscourse

0

ます([NSStringのstringWithFormat:]のような)自動解放オブジェクトを使用している場合、そのループが終了すると、プログラムが完了するまでに許可されるまでプールが排水されることはありませんループでメインイベントループは、自動解放プールが排水され、新しいプールがインスタンス化されます。

このようなコードを使用している場合は、ループに入る前に新しい自動リリースプールをインスタンス化し、ループ中に定期的に排水します(排水後自動解放プールを再インスタンス化します)。

+0

私は自分のプログラム内で実行ループを通して多くの自動解放プールを持っています... – ambientdiscourse

+0

排水していますか?私の答えはちょうど推測でしたが、あなたのコードを見ずにできることはたくさんあります。 –

+0

ええ、私はそれらを排水しています。私のコードはかなり長いので、私はそれを投稿しませんでした。また、私は、漏れが報告されていないことを報告することを忘れていました。ここに私のプログラムがしていることの要点があります。おそらくそれが助けになるでしょう。プログラムはタイマー(デバッグのために30秒に設定されています)で動作します。タイマーが起動すると、HTTPポスト用のNSURLConnectionを作成し、JSONデータを解析してデータを処理します。とにかく...私の基本的な質問は、割り当てと私の実際のプログラムのメモリ使用量が一致しない理由なのでしょうか? – ambientdiscourse

0

あなたの割り当てが発信される場合の場所を見つけるためにインスツルメンツを使用することができます。 割り当てモードでインスツルメンツを実行している場合:

    の横に表示される矢印と 灰色の円にオブジェクトの概要にカテゴリーフィールド上
  • クリックしてマウスを移動
  • フィールド名

これは、その猫のオブジェクトが存在する場所の一覧を表示しますエゴリーがインスタンス化されているかどうか、そしてどれだけの割り当てが行われたかの統計が表示されます。

メモリの使用量が増加している(漏れていない)場合は、そのメモリが作成された場所を確認して、それが何処にあるのかを追跡できるはずです。

このツールは、モバイルアプリケーションのメモリプロファイルを削減するのにも非常に役立ちます。

+1

およびモバイル以外のアプリケーション。 –

+0

@Peter:確かに。しかし、私は自分自身の記憶のプロフィールを前者についてもっと心配しています。 – Akusete

1

異なる環境で実行する場合、異なる環境変数で実行していますか? たとえば、アプリケーションを起動すると(すべてのオブジェクトがフリーにならないように)、インストゥルメントを実行しているときにNSZombieを有効にできますか?

健全性チェックのためだけに - どのようにメモリ使用量を決定していますか?メモリ使用量は増加し続けると言いますが、インストルメントで実行した場合は増加しません。インストゥルメントはメモリ使用量を測定する信頼できる方法です(最も信頼性の高い方法です)。これはちょっと奇妙に聞こえます。

+0

自分のプログラムを実行しているとき(xcodeからではありません)、アクティビティモニタを見て、「実際の」メモリ使用量を測定しています。計測器でいくつかのメモリ解析を試した結果、漏れのほとんどはフレームワークのものであり、自分の割り当てによるものではないようです。 – ambientdiscourse

関連する問題