Nachdem Sie sich mit der Android-Speicherverwaltung vertraut gemacht und Tools zur Messung der Speichernutzung Ihres Spiels eingerichtet haben, besteht der nächste Schritt darin, die Speichernutzung aktiv zu reduzieren und zu optimieren. Wenn Sie die strengen Limits von Android einhalten, wird verhindert, dass das System Ihr Spiel schließt. Außerdem werden lange Startzeiten vermieden und das Spiel kann auf allen Geräten gut ausgeführt werden.
In diesem Leitfaden werden praktische Techniken zur Reduzierung des Speicherbedarfs Ihres Spiels vorgestellt. Dabei liegt der Schwerpunkt auf der Optimierung auf Asset-Ebene, enginespezifischen Konfigurationen und Best Practices für die Speicherverwaltung.
Speicher in Unity reduzieren
Aufgrund der Architektur von Unity behält die Engine die Speicherseiten nach der Erweiterung der nativen Blockzuweiser und des verwalteten Heaps in der Regel zur Wiederverwendung bei, anstatt sie sofort an das Betriebssystem zurückzugeben. Das gilt auch, nachdem Assets freigegeben wurden. Insbesondere bleibt der virtuelle Adressraum (reservierter Arbeitsspeicher) für die Lebensdauer des Prozesses reserviert und der physische Arbeitsspeicher (RSS) wird erst nach mehreren Zyklen der automatischen Speicherbereinigung (GC) und des Trimmens zurückgefordert. Folglich kann ein temporärer Speicherpeak dazu führen, dass der residente Speicher lange Zeit überlastet bleibt, auch nachdem die tatsächliche Nutzung zurückgegangen ist. Dieses Verhalten erhöht das Risiko von Abstürzen aufgrund von Speichermangel auf Low-End-Geräten und beeinträchtigt die allgemeine Laufzeitstabilität.
Daher muss die Speicheroptimierung in Unity auf drei Säulen basieren, die auf diese Engine-Verhaltensweisen zugeschnitten sind:
- Arbeitsspeichernutzung kontrollieren, um Spitzen bei der Arbeitsspeichernutzung von vornherein zu vermeiden.
- Texturformate und Shader-Varianten verwalten, um zu verhindern, dass unnötige Assets und native Ressourcen instanziiert werden.
- Laufzeit-Code-Strukturen refaktorieren, um unnötige Zuweisungen im verwalteten Heap zu vermeiden und so die Häufigkeit der automatischen Speicherbereinigung und die Heap-Erweiterung zu minimieren.
Weitere Informationen finden Sie unter Speicheroptimierung in Unity.