私はしようとしましたが、gc.collectの間に私のUIがまだ遅れているようです。それは可能ですか?それを行うにはいくつかのトリックがありますか?主な目的は、gc.collectが自動的に実行されている間の遅れを減らすことです。Unity3Dのメインスレッド以外のスレッドでgc collectを実行できますか?
1
A
答えて
1
C#4.5からのみ、non-blocking garbage collectionを実行できます。
Unityを使用してどのスレッドから収集を呼び出すかは関係ありません(正しく覚えていれば、MonoバージョンはC#3または3.5に対応する必要があります)。
avoidは可能な限りランタイム割り当てに適しています。
定期的にガベージコレクションを起動して、スパイクを避けることができます。
3
これで問題は解決しません。解決策は、ゲームプレイ中にメモリを割り当てないことです。代わりにオブジェクトプーリングを使用してください。オブジェクトプーリングを使用すると、GameObjectsをインスタンス化して破棄するのではなく、再利用することになります。
EDIT:
ユニティ2017は、そう、あなたが今、まだこれを行うことができ、適切な解決策はをプールオブジェクトを使用することですC#4.5をサポートしています。そうすれば、GC.Collect
に電話する必要はありません。
関連する問題
- 1. 別のスレッドからメインスレッドでメソッドを実行できますか?
- 2. UI以外のスレッドでモーダルダイアログを実行
- 3. 私はメインスレッドでalloc()を実行し、別のスレッドでfree()を実行できますか?
- 4. UIスレッド以外のスレッドからアンドロイドウィジェットリファレンスにアクセスできますか?
- 5. メイン以外のスレッドでCocoa GUIを実行する
- 6. 他のスレッドのメインスレッドでメソッドを実行する
- 7. Android、Handlerはメインスレッドまたは他のスレッドで実行されていますか?
- 8. SqlCommand以外でSQLインジェクション攻撃を実行できますか?
- 9. Javaのスレッド内でスレッドを実行できますか?
- 10. 別のスレッドでスレッドを実行できますか?
- 11. メインスレッドで実行
- 12. UI以外のスレッドからmainBundleにアクセスできますか?
- 13. ブロック以外で実行されたときのtry-以外
- 14. .NETのメインUIスレッド以外のスレッドでUIを実行するにはどうすればよいですか?
- 15. Entity Framework(v4)はSQL Server以外で実行できますか?
- 16. メインスレッド以外のUI要素にアクセスすることはできますか?
- 17. JavaScript以外の言語はブラウザで実行できます
- 18. メインスレッド以外のアプリケーションライフタイムスレッドの使用
- 19. メインスレッドで実行フロー
- 20. メインスレッドのスレッドで未処理の例外を発生させますか?
- 21. URLForUbiquityContainerIdentifierをメインスレッド外のスレッドで呼び出す必要がありますか?
- 22. 現在のスレッド以外の実行中のスレッドをすべて停止する方法はありますか?
- 23. 別のスレッドでスローされた例外は、メインスレッドをクラッシュさせますか?
- 24. スレッドは自分自身とメインスレッドで実行シーケンス
- 25. メインスレッドでコールバックを実行
- 26. グリッドからブラウザ以外の機能を実行できますか?
- 27. Model-View-PresenterのプレゼンターはUI以外のアクション/ロジックを実行できますか?
- 28. マルチプロセスでの新しいプロセスはメインスレッドで実行できますか?
- 29. 実行者がメインスレッド内からスレッドを実行していない
- 30. Perl - 複数のマシン間でスレッドを実行できますか?
オブジェクトプーリングは確かに良いアプローチですが、残念なことに常に可能なわけではありません。現在の2017.2バージョンのUnity 2017.1はC#4.5をサポートしていますが、まだ実験的な状態であり、注意して使用する必要があります。 – Acimaz
@Acimazそれはまだいくつかのプラットフォームで実装されていないので、 "Experimental"と呼ばれています。 4.5は今年リリースされる前に1年以上にわたり広範にテストされており、私は初期のテスターの1人でしたので、使用する際には注意する必要はありません。その「実験」という言葉はまさにそこにあるので、Unityを使用している間に問題に遭遇したときにUnityを非難することはありません。それは問題なく正常に動作します。オブジェクトプーリングを使用できない場所を教えてください。 – Programmer
あなたは「実験的な」もので正しいですね。それについて誤解されました。しかし、よく知っている! オブジェクトをプールするものについて:開発者は、あまりにも多くの可能性があることを知っておく必要があります。答えとしてあなたには十分でない可能性のある1つの例を作成できません。しかし、私はプーリングを使用していないプロジェクトがあることを確信して、スパゲッティコード、時間の問題などのためにそれを変更することができません、あなたは開発者として作業する必要があります。 それは私が「常に」可能ではないと言った理由です。 – Acimaz