2009-05-21 16 views
5

iPhone OSデバイスでは、NSTimersを同時に実行する回数は多すぎますか?私は一回のタイマーで25回発射されるルーチンをたくさん持っています。物事はかなり不安定で、遅く、重いです。私は作業負荷を少し分散させるために1つ以上の特別なNSTimersを追加することを考えていますが、どれくらいの人が大丈夫なのか心配です。これは私が実現する個々のタイマーの発射率にある程度依存するかもしれないので、毎秒20〜30回の発射率を仮定することができます。だから、どれくらいのNSTimersが多すぎますか?NSTimersの数が多すぎますか?

答えて

5

内部では、NSTimersはすべて単一のハードウェアタイマーで実装されています。 OSは、実行中のすべてのアプリケーションのタイマーの中央リストを保持し、最も早いイベントの単一のハードウェアタイマーを単にスケジュールするだけです。

タイマーを追加しても、アプリの動作は変わりません。つまり、本質的に単一のプロセス・アプリケーションにスレッドを追加するとランタイム管理が容易になるのと同じように、タイマーを追加することで問題をパーティション化することができます。

あなたが引用した時間を考えれば、私はこのタイマーがゲームや類似のフレームアップ同期であると推測しています。

  1. 現在の描画コードを別のスレッドに分割し、同じ(同じ)タイマーコードを実行してください。これにより、より多くの制御が可能になります。

  2. これらのスロットのそれぞれでどれだけの処理が実行されているかを確認するには、コードをプロファイルします。コードを最適化するだけでよい場合もあります。

1

1あなたの場合。追加のタイマーを追加しても、アプリケーションの実行速度は向上しません。

コードを効率的にするか、タイマーを少なくする必要があります。

私はタイマーのオーバーヘッドについてはわかりませんが、火災発生率が高いほどかなりの可能性があります。タイマーはこのために作られていない、私は代わりとしてスレッドをお勧めします。

2

タイマーの数のように聞こえるのは問題ありません。 NSTimersのオーバーヘッドは、基本的には "ルーチンの束"で行っているローディングに比べて重要ではありません。今はそれを心配しないでください。必要なだけ多くのタイマーを使用してください。その後、シャーク/楽器を開き、あなたが最も多くの時間を費やしている方法を見てください。