Instruments ObjectAlloc: Erläuterung der Live-Bytes und der Gesamtbytes


86

Ich verwende das ObjectAlloc-Tool von Instument, um zu verstehen, was der Speicher meiner Anwendung (iPhone) tut und wann und wo sie es tut.

Ich hätte wirklich gerne eine grundlegende Erklärung dieser Statistiken:

  • Live Bytes
  • #Leben
  • #Transitory
  • Gesamtbytes

Wenn ich herausfinden möchte, wie viel Speicher meine Anwendung verwendet, muss ich dann Live-Bytes oder Gesamtbytes anzeigen? Umfasst dies einen Speicherverlust? Was sind vorübergehende Objekte?

Vielen Dank


6
Spalten haben kurze Beschreibungen, wenn Sie den Mauszeiger über ihre Überschriften bewegen.
Piotr Byzia

Antworten:


110

ObjectAlloc Verfolgt die gesamte Speicherzuweisung und Freigabe während der Ausführung Ihres Programms.

Dies Living bytes, or Net bytesist, wie viel Speicher Ihre Anwendung zum Zeitpunkt der Auswahl in der Zeitleiste verwendet. Dies schließt einen Speicherverlust ein, da ein Speicherverlust niemals freigegeben wird.

#Livinggibt an, wie viele Zuordnungen einer bestimmten Größe / eines bestimmten Objekttyps stattgefunden haben (und noch zugewiesen sind). Dies ist sehr nützlich, wenn Sie nach Lecks suchen.

Wenn Sie beispielsweise wiederholt eine Aktion ausführen (z. B. wenn Sie aus einem Controller mit modaler Ansicht herauskommen) und feststellen, dass die #Livingeines Objekts jedes Mal um den gleichen Betrag wächst, verlieren Sie wahrscheinlich diese Objekte. Sie können dies dann bestätigen, indem Sie einen Drilldown durchführen und die genaue Codezeile anzeigen, in der die Objekte zugeordnet sind, und sogar den Zeitindex anzeigen, der jeweils erstellt wurde.

Overall bytesEnthält Speicher, der freigegeben wurde. Es ist nützlich, diese Zahl zu Zwecken der Leistungsoptimierung zu verfolgen, aber nicht, wenn Sie nur versuchen, Ihren aktuellen Speicherbedarf zu ermitteln oder nach Lecks zu suchen.


3
Was würden Sie versuchen, in Bezug auf Gesamtbytes zu optimieren? Der Versuch, die Zahl klein zu halten, bedeutet eine bessere Leistung?
Dan Rosenstark

4
Ja richtig. Eine häufige Ursache für Leistungsprobleme besteht darin, dass derselbe Code versehentlich mehrmals ausgeführt wird. Das Zuordnungstool kann eine gute Möglichkeit sein, dies zu bemerken. Selbst wenn die zusätzlichen Objekte nicht durchgesickert sind, könnten Sie beispielsweise sagen: "Warum habe ich 3 von diesem Objekt hergestellt? Es sollte immer nur eines geben!"
Ken Aspeslagh

2
Live-Bytes geben an, wie viel Speicher Ihre App derzeit verwendet. Der Gesamtbetrag ist nur eine Summe aller Zuordnungen, die Ihre App vorgenommen hat (einschließlich des seitdem freigegebenen Speichers).
Ken Aspeslagh

1
@ KenAspeslagh warum sollte ich mich um die Gesamtbytes kümmern, wenn sie auch freigegebene Objekte enthalten?
Dejell

3
Wenn Sie die Leistung optimieren, möchten Sie die Anzahl der Zuweisungen minimieren, die Ihre App während der Ausführung vornimmt (auch wenn Sie diese Zuweisungen nicht verlieren). Übermäßige Zuweisungen können oft ein Indikator dafür sein, dass Sie es falsch machen.
Ken Aspeslagh

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.