7

私は OpenGL 経由でオブジェクトをレンダリングしており、ほとんどの状況で 60fps のスムーズなフレームレートが得られました。バックグラウンド スレッドで、REST API からのフェッチ、処理、グラフへのオブジェクトの追加など、重い処理を行うまでは (優先度の低いもの、UI の流動性を重視します)。その後、レンダラーは最大 1 秒 (バックグラウンド スレッドが実行されている間) まで非常に長い間一時停止し、その後、何も起こらなかったかのように再開します。アニメーションが同時に開始され、この間スタックするため、これに気付きました。バックグラウンド スレッドは最小の優先度に設定されており、ガベージ コレクションには最大 100 ~ 200 ミリ秒かかりますが、1 秒もかかりません。バックグラウンド タスクの任意の場所にデバッグ ポイントを設定すると、遅延なくレンダリングが続行されます。

私の重いバックグラウンド スレッドが OpenGL スレッドを枯渇させる可能性はありますか? もしそうなら、私は何ができますか?

4

1 に答える 1

1

もちろん!GPU にはデータを供給する必要があり、それは CPU によって行われます。そのため、I/O や CPU 処理など、システムの何かがボトルネックになると、GPU にデータが供給されなくなります。たとえば、アニメーションは伝統的に CPU 上で行われます。これが、PC で多くのゲームを取得し、同じグラフィック チップを使用して異なる CPU を使用してより高いフレーム レートを取得する理由です。

また、プロファイリングが非常に良いアイデアであることにも同意します。可能であれば、それが実際に REST 呼び出しであることを確認するためのプロファイリングをお勧めします。

REST 処理について気付いたことが 1 つあります。これは私に起こりました。REST は大量の文字列を処理する場合があるため、StringBuilder を使用しないと大量のガベージ コレクションが発生する可能性があります。ただし、これを取得しているようには聞こえません。

于 2012-10-23T20:15:54.803 に答える