2010-12-29 16 views
0

私はサーバーから600-700 KBのXMLデータを受け取るアプリケーションを開発しています。私はそのデータでいくつかの操作をしなければならないので、メモリが600 KBから2 M.Bに増加するデータを受け取ります。すでにアプリケーションで4Mバイトのメモリを占有しています。 XMLデータを処理しているときに、何らかの操作(事前解析)が行われ、メモリが600 K.Bから2 M.Bに増加し、最終的に600 K.Bに減少します。メモリの増加により、アプリケーションはメモリの警告を出します。メモリの警告が表示されている間、Navigation Controllerのすべてのビューが解放されますが、メモリーは1MBしか解放されません。私がすべてのビューをリリースしても、アプリケーションはクラッシュしています。 この問題で私を助けてください。それはiPad 4.2で起こります。メモリの問題iPad 4.2がクラッシュする

ありがとうございます。

+1

6〜7 MBのメモリを使用すると、アプリがクラッシュするほど音が鳴りません。あなたのアプリのメモリ不足がクラッシュの実際の原因であることを確認しましたか(クラッシュログを見てください)? –

+0

ya私はそれを確認しました。マルチタスキング機能を持つiPad 4.2でのみ発生します。私はバックグラウンドで実行されているアプリケーションの数を減らす場合。私のアプリケーションはうまくいく。 –

答えて

1

ここに魔法の答えはありません。あなたはあまりにも多くのメモリを使用しているので、少ないものを使う方法を理解する必要があります。アプリケーションの詳細を知らなくても、ほぼ1Mbのデータを読み込んで再生することは困難ですが、具体的にするのは難しいです。

データをすべてメモリにロードするのではなく、ストリームすることはできますか?助けとなるオープンソースライブラリがあります:StreamingXMLParser

また、あなたのビューは(メガバイト以上)巨大に聞こえます。そこに実行できる最適化があると確信しています。インストゥルメントを使用して、メモリが使用されている場所を確認します。

+0

実際には、第5のビューコントローラでデータをロードしています。私はナビゲーションコントローラを使用してビューコントローラをロードしています。受信したデータの多くの特殊文字を置き換える必要があるため、ストリーミングでデータを解析することはできません。私の質問は、他のアプリケーションがどのように完全に動作しているかです。彼らはアプリケーションを実行するためにその多くのメモリを占有しませんか? –

+0

私たちは、あなたが私たちに語ったことに基づいて伝えることはできません。あまりにも多くのメモリを使用するためにあなたのアプリが排出されている場合は、lessを使用する方法を見つける必要があります。他のアプリがやっていることは無関係です。あなたのアプリケーションを測定(プロファイル)して、メモリがどこで使用されているかを見つけ、メモリが解放されていると思っていることを確認し、たくさん使っている場所を最適化する必要があります。 –

0

変更可能なパラメータ値があるため1MBしかリリースされない場合があります。使用している言語に関連している場合は、開発セッション中に手動でガベージコレクション操作を開始する必要があります。可能であればxml入力を分割することもできますし、スクリプトやコードにアクセスできるようにしておくと、格納時に[独自の]コンパクトや圧縮を呼び出すこともできます。

関連する問題