1

プロファイラスパイクについては、my previous questionをフォローアップしてください。私はUnity3Dでディーププロファイルオプションを有効にすると、ScrollRect.LateUpdate()の下のコールが、わずかコンポーネントのガベージコレクションのために2.4 MBのメモリを占有していることがわかります。次のスナップショットからUnityがComponent.GetComponent()を4046回、LateUpdate()メソッドで呼び出すと、パフォーマンスの問題が発生することが明らかです。私のアプリケーションはUIが激しいですが、GCのための2.4MBはまったく受け入れられません。ScrollRect.LateUpdate()プロファイラでGCを割り当てるスパイクが増えます。2.4MB

enter image description here

通常更新のいずれかの方法でGetComponent()を使用しないことをお勧めしますが、ユニティ独自の実装では、慣例を破っています。パフォーマンスの問題を回避するために、1つのシーンで持つことができるUIアイテムの数が制限されます。

このプロファイリングデータは、メニューオブジェクトをアクティブにしたときのフレームからのみです。

2.4MBのメモリを削減/節約するための回避策はありますか?

答えて

2

通常アプリケーションが、それが構築されたときにユニティのGetComponent()ないはメモリを割り当てない更新のいずれか 方法でGetComponent()を使用しないことをお勧めしますが、ユニティ独自の実装が慣例に

を壊しています。これを確認するためにアプリケーションをビルドします。エディタでメモリのみをに割り当てます。

Unityは、数年前にこのことについてpostを作った:

我々は唯一のエディタでこれを行います。このため、 GetComponent()を呼び出して、存在しないコンポーネントを照会すると、 は、新しく割り当てられた偽のヌルオブジェクト内にこの カスタム警告文字列を生成しているため、C#メモリ割り当てが発生しています。 このメモリ割り当ては、ビルドされたゲームでは発生しません。これは非常に あなたがゲームをプロファイリングする場合、私たちは多くの特別なセキュリティ/安全/用法 のチェックを行うので、 は実際のスタンドアロンプ​​レーヤーまたはモバイルプレーヤーをプロファイルし、プロファイルではなく のエディタいくつかの のパフォーマンスを犠牲にして、あなたの人生をより簡単にするエディタ。パフォーマンスとメモリ割り当てをプロファイリングするときは、 はエディタをプロファイルしません。常にビルドされたゲームのプロファイルを作成します。

エディターから実際のゲームをプロファイルすることをお勧めします。

関連する問題