私は最近、大量のデータを非常に頻繁に処理するアプリを開発しています (1 分間に最大 15 回)。そのために、大量のメモリを割り当ててから、データのバッチごとに解放しました。
以下は、Instruments からのメモリ割り当ての画面です。
メモリ使用量は、約 3MB から約 30MB まで急速に変動します。これは iPhone にとって「健全」なのだろうか。
大量のメモリをすばやく割り当てて解放するのは危険ですか? それは持続不可能ですか、それとも悪い習慣ですか?
ありがとう!
私は最近、大量のデータを非常に頻繁に処理するアプリを開発しています (1 分間に最大 15 回)。そのために、大量のメモリを割り当ててから、データのバッチごとに解放しました。
以下は、Instruments からのメモリ割り当ての画面です。
メモリ使用量は、約 3MB から約 30MB まで急速に変動します。これは iPhone にとって「健全」なのだろうか。
大量のメモリをすばやく割り当てて解放するのは危険ですか? それは持続不可能ですか、それとも悪い習慣ですか?
ありがとう!
それは危険でも必ずしも悪い習慣でもありません。メモリの割り当てと解放には時間がかかるため、頻繁に行うのと、一度行って割り当てられたメモリを再利用するのは、メモリの使用効率(常に最小量のメモリを使用する)とパフォーマンスの間のトレードオフです。
現時点でアプリのパフォーマンスが低下していない場合は、アプリのこのトレードオフに関して正しい選択を行っている可能性があります。
一般的に、30 MBのメモリを使用することは、古いデバイス(iPhone 3G以前)ではかなりの量になります。アプリに使用可能なメモリが十分にあるかどうかを確認できないため、メモリの警告を受け取る準備をしてください。アプリがメモリ警告を受け取ったときにメモリ使用量を減らすことができない場合、OSがアプリを強制終了する可能性があります。
これらの状況での私の主な心配は、断片化です。ただし、チャンクがすべて同じサイズである場合は、問題ありません (グラフを見ると、ピークが完全に水平に見えるので、そうであると思います)。
割り当てコストを支払うことになりますが、Ole が言うように、アプリがすでに十分に機能している場合、それを最適化しようとしてもあまり意味がありません。
ユーザーが iPhone 4 または iPhone 3GS を使用している場合は可能ですが、iPhone 3G では非常に迅速にメモリ警告が表示されます。iPhone 4 にはアプリ用に 256 MB の RAM があります (合計で 512 MB) iPhone 3GS にはアプリ用に 128 MB があり、iPhone 3g にはアプリ用に合計 256 MB しかありません。 .
Apple が言うように、本当に必要なメモリだけを割り当てる必要があり、autorelease をあまり使用しないようにしてください。
パフォーマンスがそれほど悪くない場合は、使用するメモリを減らして、本当に必要なときに多く割り当てるようにします。