iPhone OS デバイスで、同時に実行される NSTimer の数は多すぎますか? 1 秒間に 25 回起動する 1 つのタイマーによって呼び出されるルーチンがたくさんありますが、物事はかなり途切れ途切れで、遅く、重いものです。作業負荷を少し分散するために 1 つ以上の NSTimer を追加することを考えていますが、いくつ使用しても問題ないか心配です。これは、私が認識している個々のタイマーの発火率に多少依存する可能性があるため、1 秒あたり 20 ~ 30 回の発火率を想定してみましょう。では、いくつの NSTimers が多すぎますか?
3 に答える
内部的にNSTimers
は、すべて単一のハードウェア タイマーに実装されています。OS は、実行中のすべてのアプリのタイマーの中央リストを保持し、最も早いイベントのために 1 つのハードウェア タイマーをスケジュールするだけです。
タイマーを追加しても、アプリの動作は変わりません。つまり、本質的に単一のプロセス アプリにスレッドを追加するとランタイム管理が容易になるのと同じように、タイマーを追加すると問題を分割するのに役立ちます。
あなたが引用した時間を考えると、このタイマーはゲームのフレーム更新同期または同様のものであると推測しています。私はいくつかのことを提案します:
現在の描画コードを別のスレッドに分割し、その中で (同じ) タイマー コードを実行します。これにより、より多くの制御が可能になります。
コードをプロファイリングして、これらの 1/25 スロットのそれぞれで実行される処理の量を確認します。コードを最適化する必要があるだけかもしれません (おそらくそうです)。
タイマーの数は問題ないようです。NSTimers のオーバーヘッドは、「一連のルーチン」で行っている読み込みと比較して、基本的に重要ではありません。今は気にしないでください。必要な数のタイマーを使用します。その後、サメ/楽器を開いて、どのメソッドに最も時間を費やしているかを確認してください。
あなたの場合は1。タイマーを追加しても、アプリケーションの実行速度は向上しません。
コードをより効率的にするか、タイマーを起動する頻度を減らす必要があります。
タイマーのオーバーヘッドについてはわかりませんが、発射速度が高いとかなりの量になる可能性があります。このためのタイマーは作成されていません。代替手段としてスレッドを提案します。