Der Memory Profiler ist ein neues Paket für Unity 2018.3 oder höher, mit dem du die Speichernutzung eines Projekts analysieren kannst, um Speicherlecks und Fragmentierungen zu finden. Speicherverluste können auftreten, wenn Speicher zugewiesen wird, die Zuordnung jedoch nie zur Wiederverwendung aufgehoben wird, nachdem der Speicher nicht mehr benötigt wird. In diesem Lernprogramm erfährst du, wie du mit dem Memory Profiler nach Speicherlecks suchen.
Der Memory-Profiler
Mit dem Memory-Profiler kannst du die Speichernutzung eines Projekts analysieren, um Lecks und Fragmentierungen zu finden. Speicherverluste können auftreten, wenn Speicher zugewiesen, aber nicht freigegeben wird, nachdem er nicht mehr benötigt wird. Die Programmleistung verschlechtert sich, wenn der Speicher knapp wird, was schließlich zum Absturz des Programms (und möglicherweise sogar des Hostgeräts) führt. Wenn der Speicher in vielen kleinen Blöcken und nicht in weniger großen zusammenhängenden Blöcken zugewiesen wird, spricht man von Speicherfragmentierung. Dies führt dazu, dass die kleinen, nicht zugewiesenen Speicherbereiche zwischen den zugewiesenen Blöcken für die Verwendung nicht mehr verfügbar sind.
Installation des Memory Profiler
Der Memory Profiler arbeitet sowohl mit dem Unity Editor als auch mit Entwicklungs-Builds zusammen und ist im Paket-Manager als Vorschau-Paket verfügbar.
So installierst du den Memory Profiler:
1. Wähle im Unity-Editor in der Dropdown-Liste Fenster die Option Paket-Manager.
2. Klicke auf Erweitert und wählen Vorschaupakete anzeigen.
3. Suche Memory Profiler und klicke in der rechten unteren Ecke des Package Manager-Fensters auf Installieren.
4. Nach der Installation kannst du auf den Memoryprofiler zugreifen, indem du in der Dropdown-Liste „Fenster“ die Option „Analyse“> „Memory Profiler“ auswählst.
Aufzeichnen eines Speicher-Snapshots
Der Speicher-Profiler kann auf einen aktuell ausgeführten Entwicklungs-Build entweder auf dem lokalen Computer abzielen oder ihm eine bestimmte IP-Adresse für einen vernetzten Computer zuweisen.
1. Bevor du einen Speicherauszug erfassen kannst, musst du ein Ziel auswählen. Standardmäßig ist der Unity-Editor das Ziel.
2. Um ein neues Ziel auszuwählen, klicke auf das Dropdown-Menü in der oberen linken Ecke des Memory Profiler.
Klicke auf die Schaltfläche Erfassen, um das aktuelle Speicherprofil des ausgewählten Ziels zu erfassen . Beachten Sie, dass das Capture selbst etwas Speicher belegt. In einigen Fällen kann dies dazu führen, dass das Ziel einfriert oder abstürzt, wenn der Arbeitsspeicher knapp wird.
Importieren eines Schnappschusses des erfassten Speichers
1. Klicken Sie oben im Fenster Memory Profiler auf die Schaltfläche Importieren.
2. Wähle über das Dropdown-Menü „Dateiformat“ in der unteren rechten Ecke des Dialogfelds „Snapshot-Datei importieren“ das Format des zu importierenden Speicher-Snapshots aus. Zu den Optionen gehören .snap-Dateien, die mit dem Memory Profiler erfasst wurden, und .memsnap *, die mit dem Bitbucket Memory Profiler erstellt wurden.
3. Navigiere zu deinem Snapshot und wähle ihn aus. Klicke auf Öffnen.
4. Wenn du zum ersten Mal einen Speicher-Snapshot aufnimmst, wird ein Ordner mit dem Namen MemoryCaptures erstellt (auf derselben Ebene wie der Ordner Assets und nicht in diesem Ordner). Sie können auch Memory Snapshots in diesen Ordner ablegen, um sie zugänglich zu machen.
5.Speicherauszug ansehen
Nach der Aufnahme oder dem Import (einschließlich des Verschiebens des Schnappschusses in den MemoryCaptures-Ordner) wird der Schnappschuss in der linken Spalte des Memory Profiler-Fensters angezeigt. Klicke auf Öffnen, um das Speicherprofil anzuzeigen.
Die Standard- und intuitivste Ansicht ist die Baumstruktur (Abbildung 06). In dieser Ansicht wird die von jedem Elementtyp verwendete Speichermenge proportional dargestellt. In unserem Beispiel belegen 126 Shader zusammen 80 MB Arbeitsspeicher.
Um eine Kategorie detaillierter anzuzeigen, klicke darauf, um alle Elemente und ihre jeweiligen Speicherabdrücke anzuzeigen. Ausführlichere Informationen werden unterhalb der Baumstruktur in einer Tabelle angezeigt. Klicke auf die Überschriften, um die Tabelle nach Wert oder Gruppe zu sortieren.
Die Tabellenansicht, die sich sowohl unter der Baumstruktur als auch unter der Speicherstruktur befindet, enthält detailliertere Informationen zur Speichernutzung einzelner Elemente.
Eine direktere Ansicht, die Memory Map, zeigt das Speicherlayout in verschiedenen Farben verschiedene Speichertypen darstellt. Dies kann hilfreich sein, um Speicherfragmentierung zu lokalisieren.
Arbeiten mit dem Memory Profiler
Ein Memory-Leck finden
So findest du ein Speicherleck:
1. Starte den Player, lege ihn als Speicherprofil-Ziel fest und machen eine Momentaufnahme von einer leeren Szene.
2. Lade die Szene, die du testen möchtest. Spiele einen Teil der Szene ab, um die notwendigen Assets zu laden.
3. Entlade die Szene, indem du Resources.UnloadUnusedAssets () oder indem du eine leere Szene zweimal lädst/erstellst
4. Mache einen weiteren Schnappschuss und beende den Wiedergabemodus.
5. Lade in der Workbench den ersten und den zweiten Screenshot und klicke auf Diff. Unity berechnet den Unterschied zwischen den beiden Screenshots. Dies könnte einige Sekunden dauern, abhängig von der Größe des Schnappschusses.
6. Klicke in der Tabellenansicht auf die Überschrift der Diff-Spalte und wähle Group aus.
7. Einträge werden gruppiert: die gleichen, in beiden Schnappschüssen , ab dem ersten gelöschten Schnappschuss und neu. Neue Einträge sind mögliche Speicherverluste.
Der Memory Profiler ist eine hervorragende Möglichkeit, die Speichernutzung deines Projektes zu überwachen.
Du kannst nicht nur sehen, was den meisten Speicherplatz verbraucht, sondern auch die Art und Weise, wie dein Projekt Speicher verwendet oder missbraucht. Speicherlecks und Fragmentierung sind zwei der häufigsten Probleme, die Auswirkungen auf das Projekt haben
und der Memory Profiler führt eine Fehlerbehebung durch.
Originally posted 2020-03-16 16:46:00.