かなり大雑把な質問内容になってしまうことをご承知ください。
unityのパフォーマンスの件で、気になったことがありましたので質問させていただきます。
動作の例
今回の環境として、一定時間ごとにオブジェクトが増えていく、というシステムになっています。
unityから実行(play)し、ある程度時間が経つと、updateの呼び出し量も増え、少しずつ重たくなります。
そこで、ゲームを一時中断(pause)し、すぐに再スタート(play)すると、動作が軽くなります。
とはいえ文章では中々伝えづらいので、画像を添付します。
上記画像で、60fpsを下回るのが一時中断前、崖のように急に60fpsを上回った箇所が一時中断したところです。
このように、中断を挟むだけで、かなり速度が改善します。
なお、上記画像のグラフには、EditorLoop(Othersの箇所)は含まれず、ほとんどが自作スクリプトによる実行量になります。
質問内容
上記のように、中断を挟むだけで改善する理由として考えられるものはありますでしょうか?
もちろん、情報がこれだけしかない以上、根本的な原因を特定することは厳しいと思いますので、何か解決になる手助けをいただけると嬉しいです。
動作環境
unity2019.4.1f1
macOS 10.15.5
2020/06/30 追記
スクリプト速度の改善と直接関係あるかは不明ですが、
WaitForTargetFPSの「semaphore.WaitForSignal」というものが入っている事が実行の大幅な時間を使用している時があることが分かりました。
これが常に滞在しているわけではなく、あるとき突然出現し、上記のグラフを水平だったものを一気にジグザグにしてしまいます。
そして一時中断し、再開すると、このsemaphoreは0に近くなり、(一時的に)安定するようです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/30 01:49
2020/06/30 01:51