2016-04-08 6 views

答えて

1

C#4.5からのみ、non-blocking garbage collectionを実行できます。

Unityを使用してどのスレッドから収集を呼び出すかは関係ありません(正しく覚えていれば、MonoバージョンはC#3または3.5に対応する必要があります)。

avoidは可能な限りランタイム割り当てに適しています。

定期的にガベージコレクションを起動して、スパイクを避けることができます。

3

これで問題は解決しません。解決策は、ゲームプレイ中にメモリを割り当てないことです。代わりにオブジェクトプーリングを使用してください。オブジェクトプーリングを使用すると、GameObjectsをインスタンス化して破棄するのではなく、再利用することになります。

EDIT:

ユニティ2017は、そう、あなたが今、まだこれを行うことができ、適切な解決策はをプールオブジェクトを使用することですC#4.5をサポートしています。そうすれば、GC.Collectに電話する必要はありません。

+0

オブジェクトプーリングは確かに良いアプローチですが、残念なことに常に可能なわけではありません。現在の2017.2バージョンのUnity 2017.1はC#4.5をサポートしていますが、まだ実験的な状態であり、注意して使用する必要があります。 – Acimaz

+0

@Acimazそれはまだいくつかのプラットフォームで実装されていないので、 "Experimental"と呼ばれています。 4.5は今年リリースされる前に1年以上にわたり広範にテストされており、私は初期のテスターの1人でしたので、使用する際には注意する必要はありません。その「実験」という言葉はまさにそこにあるので、Unityを使用している間に問題に遭遇したときにUnityを非難することはありません。それは問題なく正常に動作します。オブジェクトプーリングを使用できない場所を教えてください。 – Programmer

+0

あなたは「実験的な」もので正しいですね。それについて誤解されました。しかし、よく知っている! オブジェクトをプールするものについて:開発者は、あまりにも多くの可能性があることを知っておく必要があります。答えとしてあなたには十分でない可能性のある1つの例を作成できません。しかし、私はプーリングを使用していないプロジェクトがあることを確信して、スパゲッティコード、時間の問題などのためにそれを変更することができません、あなたは開発者として作業する必要があります。 それは私が「常に」可能ではないと言った理由です。 – Acimaz

関連する問題