投稿

4月, 2021の投稿を表示しています

【GDevelop】テキストオブジェクトに追記するのはヤバいというお話

イメージ
スコアやステータスなどを表示したいときに便利なテキストオブジェクトですが、正しく利用しないと処理落ちの原因になったりするので注意が必要です。 そこで GDevelop のテキストオブジェクトに対し、どういう処理をすると負荷が高いかを実験してみました。 まず、テキストオブジェクトを 8 個用意し、次のようなイベントを実行してみます。 テキスト1 には普通に「あいうえおかきくけこ」を代入します。 テキスト2 には「あ~こ」までを 1 文字ずつ加算で追加します。 テキスト3 には大量のテキストを代入します。 テキスト4 には他とは違うフォントを設定しています。 テキスト5 にはテキスト1 と同じアクションを実行します。 テキスト6 にはテキスト1 と同じ文字数分、異なるテキストを代入します。 テキスト7 には大量のテキストを一度だけ代入します。 テキスト8 には一度だけ「あ~こ」までを 1 文字ずつ加算で追加します。 それを実行したプロファイラーの結果は、次のとおりです。 (プロファイラーの使い方や見方は、また別の記事を書きます😅) events セクション内の値を見ることで、それぞれのイベントにどれだけ時間(負荷)がかかったか分かります。 セクション名 時間(ms) % of parent % of total テキスト1 0.01ms 0.67% 0.67% テキスト2(加算で追記) 1.34ms 94.62% 73.09% テキスト3(多テキスト) 0.01ms 0.64% 0.50% テキスト4(違フォント) 0.00ms 0.11% 0.09% テキスト5(同テキスト1) 0.00ms 0.08% 0.06% テキスト6(違テキスト) 0.00ms 0.07% 0.06% テキスト7(一度・多) 0.00ms 0.03% 0.03% テキスト8(一度・加算) 0.01ms 0.59% 0.46% 注目すべき点は、加算で 1 文字ずつ追記した場合の負荷の高さです。 一度に大量のテキストを代入した場合と比べても、100 倍以上の負荷がかかっています😥 追記時に内部的にどのような処理がおこなわれているのかは知りませんが、おそらく文字数が変わるたびに、文字の形状か