プロジェクトにおけるパフォーマンス問題の一般的な原因のひとつに、文字列とテキストの扱いがあります。全ての文字列がイミュータブルです。文字列を操作した場合には必ず新しい完全な文字列の割り当てが発生します。これは比較的に負荷が高く、大きな文字列や大きなデータセット、またはタイトなループで文字列の連結を頻繁に行うと、パフォーマンスの問題に繋がり兼ねません。メモリに高負荷が掛かる大きな原因ともなり得ます。使用して実際の連結処理を行うようにしてください。インスタンスを使用することで、不要なメモリ割り当てを更に削減することもできます。文字列を扱う場合のベストプラクティス一覧が提供されています。意図せず使用してしまうことです。アプリケーション向けに開発されたもので、テキスト中の文字に関して、多様な文化(カルチャ)的・言語的規則に基づく文字列を扱えるように意図されています。ロケールで実行されます。プロジェクトでは、これは全く不要です。プログラマーには馴染み深い方法で、各バイトが表す文字に関わらず、単純に文字列の一連のバイトを比較します。提供するだけで簡単に行えます。著しく非効率的であることが知られています。置き換えが難しいですが、非効率的な文字列比較方法の最適化は簡単に行えます。渡すことを推奨しています。ベンチマークは、カスタム実装と比べてこの影響は比較的小さいことを示しています。両方とも、以下のような単純な手書きコード版に置き換えることが可能です。文字列のマッチや操作を行うにあたって非常に有益な方法ですが、パフォーマンス負荷が著しく高くなる場合があります。クエリーでさえも大きな一時的データ構造体を「内部的に」割り当てます。メモリの使い回しは、初期化中を除いては行われないようにする必要があります。メソッドを使用しないことが強く推奨されます。正規表現をひとつの文字列パラメーターとして受け取ります。これらのメソッドは正規表現をオンザフライでコンパイルし、生成されたオブジェクトをキャッシュしません。これは、ごく当たり障りのない一行コードです。ガベージを生成します。このガベージは簡単なリファクタリングによって無くすことができます。単純なマッチング処理の場合、これでも高負荷ではありますが、先の例に比べればかなり改善されています。オブジェクトのコンストラクタの最初のパラメーターとして渡して事前コンパイルするほうが格段に効率的です。JSON、およびその他の長文式テキスト構文解析テキストの構文解析は、読み込み時間に発生する処理でしばしば最も重くなるもののひとつです。場合によっては、テキストの構文解析に掛かる時間がアセットの読み込みとインスタンス化に掛かる時間を越えることもあります。この理由は使用されるパーサによって異なります。パーサは非常に融通の利くものですが、特定のデータレイアウト向けには最適化できません。サードパーティのパーサの多くはリフレクションを基盤に構築されています。リフレクションは、(パーサがデータレイアウトの変化に素早く適応できるようになるため)開発中には非常に優れた選択肢ですが、速度が遅いことで知られています。よって、部分的にこれを解決することができます。システムにインターフェースを提供するものです。シリアライズ処理中に複雑なデータタイプの変換を行うために必要な処理を簡単に追加する方法をご確認いただけます。つの解決方法をご検討ください。ビルド時間で構文解析するテキスト構文解析の負荷を回避する最善の方法は、ランタイムでのテキスト構文解析を完全に無くすことです。これは基本的に、テキストデータを何かしらのビルド手順によってバイナリ形式に「ベイクする」ことを意味します。ヒエラルキーにデータを移動させ、その後にデータをアセットバンドル経由で分配します。使用に関して非常に有益な解説が提供されています。この方法は最高のパフォーマンスをもたらしますが、動的に生成される必要のないデータにしか適しません。パラメーターなどです。目は、構文解析される必要のあるデータを小さく分割する方法です。分割されたデータの構文解析に掛かる負荷はいくつかのフレームに分散され得ます。理想的なのは、データの中で、理想のユーザー体験を提供するために必要な部分を特定し、その部分のみを読み込むことです。簡単な例を挙げると、プラットフォームゲームのプロジェクトであれば、全てのステージのデータをひとつの巨大な塊にまとめてシリアライズする必要はありません。データをステージ毎に個別のアセットに分割し、さらに必要に応じ各ステージをエリア毎に分割すれば、プレイヤーの進行に応じて随時必要なデータを構文解析することができます。これは簡単そうに聞こえますが、実際にはツールコードに相当な労力が掛かり、またデータ構造の再整理が必要になる可能性もあります。インタラクションを一切必要としないものであれば、構文解析処理をワーカースレッドに移動することが可能です。つのコアしか搭載していません。この手法が比較的適しているのは、ビルドターゲットがスタンドアロンや据置き機の場合です。デッドロックや競合状態を避けるためには、プログラミングに慎重を要します。同期クラスと併用してワーカースレッドを管理します。ロケールで実行されます。シリアライズ処理中に複雑なデータタイプの変換を行うために必要な処理を簡単に追加する方法をご確認いただけます。つのコアしか搭載していません。この手法が比較的適しているのは、ビルドターゲットがスタンドアロンや据置き機の場合です。2017.2チュートリアルAnswersナレッジベースフォーラムアセットストアフィードバック。