2016-04-08 6 views

Antwort

1

Nur von C# 4.5 können Sie eine non-blocking garbage collection durchführen.

Es spielt also keine Rolle, welchen Thread Sie aufrufen, sammeln Sie mit Unity (Mono-Version sollte C# 3 oder 3.5 entsprechen, wenn ich mich richtig erinnere).

Es ist eine gute Praxis zu avoid so viel wie möglich Laufzeitzuweisung.

Sie können eine Garbage-Collection regelmäßig manuell auslösen, um Spikes zu vermeiden.

3

Das wird Ihr Problem nicht lösen. Die Lösung besteht darin, während des Spiels keinen Speicher zuzuweisen. Verwenden Sie stattdessen das Objektpooling. Beim Objektpooling werden Sie die GameObjects erneut verwenden, anstatt sie zu instanziieren und zu zerstören.

EDIT:

Unity 2017 unterstützt C# 4.5, so dass Sie dies jetzt tun können, aber nach wie vor, die richtige Lösung ist Object Pooling zu nutzen. Auf diese Weise müssen Sie GC.Collect at-all nicht anrufen.

+0

Objekt-Pooling ist zwar eine gute Annäherung, aber leider nicht immer möglich. Unity 2017.1 zur aktuellen Version 2017.2 unterstützt C# 4.5, befindet sich jedoch noch in einem experimentellen Zustand und sollte mit Vorsicht verwendet werden. – Acimaz

+0

@Acimaz Es heißt "Experimental", weil es auf einigen Plattformen noch nicht implementiert ist. 4.5 wurde vor mehr als einem Jahr ausgiebig getestet, bevor es dieses Jahr veröffentlicht wurde. Ich war einer der ersten Tester, daher sollte es bei der Verwendung keine Vorsicht geben. Dieses "Experiment" -Wort ist einfach da, also werden die Leute nicht die Einheit beschuldigen, wenn sie bei der Verwendung des Elements auf Probleme stoßen. Es funktioniert ohne Probleme. Sag mir, wo es nicht möglich ist, Objekt-Pooling zu verwenden. – Programmer

+0

Ja, du hast Recht mit der "experimentellen" Sache. Wurde darüber falsch informiert. Gut zu wissen, obwohl! Was das Objekt-Pooling betrifft: Als Entwickler sollte man wissen, dass es zu viele Möglichkeiten gibt und ich kann Ihnen kein Beispiel vorstellen, in dem es nicht möglich wäre, was Ihnen als Antwort genügen würde. Aber ich bin mir sicher, dass es Projekte gibt, die kein Pooling verwenden und jetzt nicht in der Lage sind, dies aufgrund von Spaghetti-Code, Zeitproblemen usw. zu ändern, mit denen Sie als Entwickler arbeiten müssen. Und deshalb habe ich gesagt, dass es nicht "immer" möglich ist. – Acimaz

Verwandte Themen