3

物理ベースのゲームのコーディングでは、サブクラス化された NSObject からすべてを作成しました。フォース ベクトルは各パーティクル オブジェクトの NSArrays に保存され、CADisplayLink を使用して 60fps で加速度、速度、および位置が計算されます。

バージョン 1 は最適化されることを意図していませんでしたが、非常にうまく動作するようです。CADisplayLink は高速で一貫性があります。しかし、割り当ての統計を見てみると...まあ、そんなものは見たことがありません。ARC は Live Bytes を 1 メガバイト未満に抑えるのに優れた仕事をしていますが、これは全体的な割り当てを 1 分間に 6 ギガまで細断処理しています。

だから私の質問は:

このコードをデバイスで長時間実行するのは危険ですか? これはどれほど「悪い」ことですか?Apple はこれを受け入れるでしょうか、それともこのまま開発を続けると iPad を揚げてしまうのでしょうか?

ここに画像の説明を入力

4

1 に答える 1

15

割り当てスループットを最小限に抑えるための最適化は、非常に効果的な方法です。

特に、すべての割り当てでは、割り当て内のほとんどのバイトにアクセスする必要があり、割り当て内のすべてのバイトごとに、いくつかの書き込みと多くの読み取りが必要になる可能性があります。これらすべての読み取り/書き込みには、CPU サイクルとシステム バス全体のトランザクションが必要です。

そのため、はい、バッテリーを消費し、システム温度を上昇させます。ただし、デバイスが燃え尽きる可能性は低いです。:)

「#Transitory」で並べ替えて、一時的な割り当てをなくす方法を考え始めます。通常、最初はさまざまな Malloc ## Bytes 割り当てを無視します。これは、ほとんどの場合、いくつかのクラスのインスタンスのバッキング ストアであるためです。一時的なインスタンスを排除し、malloc ドロップの数も減らします。

特定の割り当てタイプについて、クリックして、そのタイプのすべての割り当てが作成された場所のリストを表示できます。関数名で並べ替えて、最も一般的な関数の感触を掴んでください。最適化のターゲットをそこに設定してください。

この方法を使用して、いくつかの大規模なアプリケーションを大幅に最適化することができました。単純に割り当て率を最小化するだけで、特定の操作の実行時間を 75% 以上短縮することもあります。

于 2012-09-30T18:44:56.203 に答える