Gesamtgröße eines Objectes?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Gesamtgröße eines Objectes?

    Hi,

    ich habe das Problem, dass ein Object das ich erzeuge viel zu groß wird. Da das Object aber aus zig anderen Arrays von Objecten besteht, die selber auch wieder Arrays besitzen und das in ziemlicher Tiefe, würde ich jetzt gerne mal so eine Art Memory-Tree dieses Objectes während der Laufzeit sehen. Also quasi einen Breakpoint setzen nachdem das Object fertig erzeugt wurde und dann nachsehen können was in dem Object wieviel Platz verbraucht.

    Wie bekomme ich das hin?

    Mit dem Allocations-Instrument kann ich, wenn ich nach dem Erzeugen des Objectes eine Endlosschleife schreibe (Sonst wird das Object wieder freigegeben und es nutzt mir nichts), ja nur die 1000de von kleinen Teile sehen aber nicht wie die jetzt in dem Object drin hängen.

    Gibt es da irgendwas?

    Danke

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:


    Mit dem Allocations-Instrument kann ich, wenn ich nach dem Erzeugen des Objectes eine Endlosschleife schreibe (Sonst wird das Object wieder freigegeben und es nutzt mir nichts), ja nur die 1000de von kleinen Teile sehen aber nicht wie die jetzt in dem Object drin hängen.


    Speicherverbrauch in Intruments angucken, Objektbaum allozieren, Speicherverbrauch in Instruments angucken, Objektbaum freigeben, Speicherverbrauch in Instruments angucken.

    Ist nicht exakt, sollte dir aber eine gute Idee geben. ARC ist übrigens deterministisch.
  • SteveJ schrieb:

    Thallius schrieb:


    Mit dem Allocations-Instrument kann ich, wenn ich nach dem Erzeugen des Objectes eine Endlosschleife schreibe (Sonst wird das Object wieder freigegeben und es nutzt mir nichts), ja nur die 1000de von kleinen Teile sehen aber nicht wie die jetzt in dem Object drin hängen.


    Speicherverbrauch in Intruments angucken, Objektbaum allozieren, Speicherverbrauch in Instruments angucken, Objektbaum freigeben, Speicherverbrauch in Instruments angucken.

    Ist nicht exakt, sollte dir aber eine gute Idee geben. ARC ist übrigens deterministisch.


    das kann aber sehr ungenau sein weil einiges gecached wird etc...
  • gandhi schrieb:

    SteveJ schrieb:

    Ah, interessant. Wer cached denn was?


    Viele NSNumber- und NSString-Objekte werden aus einem Cache geholt. Genauso NSImage-Objekte, die Du mit [NSImage imageNamed:] erzeugt hast. Ob das allerdings das Ergebnis so großartig verfälscht sei dahingestellt.

    schönen Gruß


    gandhi


    ich würde mal sagen: JA
    vor allem bei images kann das ja schon sehr viel speicher sein...
  • Also es geht nicht um Images oder unbekannte Größen.

    Der Debugger hat die Informationen. Muss er ja haben, denn ich kann mich ja von Hand durch das Ganze Object und seine Unterobjekte hangeln.

    Zu jedem Object gibt mir der Debugger ja auch die Speicheradresse aus, Wenn er dazu zusätzlich noch die benutzen Byte anzeigen würde wäre das einfach klasse. So kann man dann quasi wie im Finder, wenn man auf "Sortieren nach Dateigröße" stellt, ansehen wie groß welches Object oder Unterobject ist.

    Vielleicht ein Feature für Xcode7

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    Also es geht nicht um Images oder unbekannte Größen.

    Der Debugger hat die Informationen. Muss er ja haben, denn ich kann mich ja von Hand durch das Ganze Object und seine Unterobjekte hangeln.

    Zu jedem Object gibt mir der Debugger ja auch die Speicheradresse aus, Wenn er dazu zusätzlich noch die benutzen Byte anzeigen würde wäre das einfach klasse. So kann man dann quasi wie im Finder, wenn man auf "Sortieren nach Dateigröße" stellt, ansehen wie groß welches Object oder Unterobject ist.

    Vielleicht ein Feature für Xcode7

    Gruß

    Claus


    wenn dich nur die größe des objektes interessiert dann kann der kompiler das wissen (einfach die instanzvariablen zählen/messen). dass in diesen aber auch daten drin liegen können und er dessen länge wiederum nicht wissen kann ist auch klar. also was nützt dir zu wissen dass zb NSData an sich 160 byte benötigt, aber auf einen speicherblock von 10 MB verweist und dann noch auf irgendwelche superklassen, beschreibungen, hashes etc...
  • gritsch schrieb:

    Thallius schrieb:

    Also es geht nicht um Images oder unbekannte Größen.

    Der Debugger hat die Informationen. Muss er ja haben, denn ich kann mich ja von Hand durch das Ganze Object und seine Unterobjekte hangeln.

    Zu jedem Object gibt mir der Debugger ja auch die Speicheradresse aus, Wenn er dazu zusätzlich noch die benutzen Byte anzeigen würde wäre das einfach klasse. So kann man dann quasi wie im Finder, wenn man auf "Sortieren nach Dateigröße" stellt, ansehen wie groß welches Object oder Unterobject ist.

    Vielleicht ein Feature für Xcode7

    Gruß

    Claus


    wenn dich nur die größe des objektes interessiert dann kann der kompiler das wissen (einfach die instanzvariablen zählen/messen). dass in diesen aber auch daten drin liegen können und er dessen länge wiederum nicht wissen kann ist auch klar. also was nützt dir zu wissen dass zb NSData an sich 160 byte benötigt, aber auf einen speicherblock von 10 MB verweist und dann noch auf irgendwelche superklassen, beschreibungen, hashes etc...


    Verstehe ich nicht. Nehmen wir ein einfaches Konkretes Beispiel

    Object1
    char a
    char b
    NSArray c

    Object2
    char a
    char b

    In c sind jetzt 2 Object des Typs Object2. Wir haben also 2 chars + 2*2chars = 6 chars (plus irgendwelchen Überhang der NSOBject und NSARray Klasse aber das ist hier jetzt uninteressant)

    Das weiß der Debugger doch auch, denn wenn ich einen Breakpoint setze und mir Object 1 anzeigen lasen, dann zeigt er mir an, das Object1->c 2 Objecte des Types Object2 enthält und auch diese kann ich mir ansehen. Also weiß der Debugger doch von allen Daten. Warum sollte er also nicht in der Lage sein nun zu ermitteln wieviel Speicher Object1 insgesammt braucht?

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    gritsch schrieb:

    Thallius schrieb:

    Also es geht nicht um Images oder unbekannte Größen.

    Der Debugger hat die Informationen. Muss er ja haben, denn ich kann mich ja von Hand durch das Ganze Object und seine Unterobjekte hangeln.

    Zu jedem Object gibt mir der Debugger ja auch die Speicheradresse aus, Wenn er dazu zusätzlich noch die benutzen Byte anzeigen würde wäre das einfach klasse. So kann man dann quasi wie im Finder, wenn man auf "Sortieren nach Dateigröße" stellt, ansehen wie groß welches Object oder Unterobject ist.

    Vielleicht ein Feature für Xcode7

    Gruß

    Claus


    wenn dich nur die größe des objektes interessiert dann kann der kompiler das wissen (einfach die instanzvariablen zählen/messen). dass in diesen aber auch daten drin liegen können und er dessen länge wiederum nicht wissen kann ist auch klar. also was nützt dir zu wissen dass zb NSData an sich 160 byte benötigt, aber auf einen speicherblock von 10 MB verweist und dann noch auf irgendwelche superklassen, beschreibungen, hashes etc...


    Verstehe ich nicht. Nehmen wir ein einfaches Konkretes Beispiel

    Object1
    char a
    char b
    NSArray c

    Object2
    char a
    char b

    In c sind jetzt 2 Object des Typs Object2. Wir haben also 2 chars + 2*2chars = 6 chars (plus irgendwelchen Überhang der NSOBject und NSARray Klasse aber das ist hier jetzt uninteressant)

    Das weiß der Debugger doch auch, denn wenn ich einen Breakpoint setze und mir Object 1 anzeigen lasen, dann zeigt er mir an, das Object1->c 2 Objecte des Types Object2 enthält und auch diese kann ich mir ansehen. Also weiß der Debugger doch von allen Daten. Warum sollte er also nicht in der Lage sein nun zu ermitteln wieviel Speicher Object1 insgesammt braucht?

    Gruß

    Claus


    Object1
    char a
    char *b

    und nun? ;)