2012-04-11 7 views
2

Ich bin derzeit auf der Suche nach der Ausgabe des Monotouch Speicher Profiler beim Ausführen meiner App im Simulator. kann ich diese Zahlen sehen:Monotouch Memory Profiler: Wofür steht die Nummer "Total Memory"?

Object count: 154.043 
Total memory: 5.099.648 bytes 

die „Gesamtspeicher“ bedeutet, ich bin über 5 MB RAM besetzen? Instruments zeigt mir, dass ca. 30MB zugewiesen sind, darum frage ich.

Antwort

5

ist die Menge an Speicher, die von allen verwalteten Objekten belegt wird. Der Profiler addiert nur den von jedem Objekt verwendeten Speicher.

Dies ist nicht die Gesamtspeichermenge in dem Verfahren verwendet, für ein paar Gründe:

  • Monotouch Speicher zuteilen nicht auf einer pro-Objekt-Basis. MonoTouch reserviert den Speicher stattdessen in Blöcken, und wenn ein neues Objekt erstellt wird, wird ihm normalerweise bereits zugeordneter Speicher zugewiesen. In jedem Fall ist dies normalerweise ein Unterschied, den Sie ignorieren können zwischen dem gesamten Speicher, den der Profiler meldet, und dem tatsächlichen Speichervolumen Ihrer App (und dies ist nicht der Grund für den Unterschied zwischen 5 MB verwalteter Speicher und den 30 MB-Instrumentenberichten).

  • MonoTouch (und daher sein Profiler) weiß nichts über Speicher, der von nativem Code zugewiesen wird. Wenn Sie beispielsweise ein UIImage-Objekt erstellen, werden die Bilddaten vollständig in systemeigenem Code gespeichert und nicht in unserem Profiler angezeigt (Sie sehen im Profiler UIImage-Instanzen, der von ihnen verwendete Speicher wird jedoch der verwaltete Speicher sein , die die Bilddaten nicht enthält). Ein anderes Beispiel ist, wenn Sie eine Ansicht von einer XIB laden: Wenn Sie irgendwie nicht auf die Struktur von Objekten aus verwaltetem Code zugreifen, werden keine verwalteten Objekte für eines der Objekte in der Struktur erstellt, und nichts wird in der verwalteten Struktur angezeigt Profiler. Dies ist der tatsächliche Unterschied zwischen den 5 MB des verwalteten Profilers und den 30 MB-Instrumentenberichten.

haben auch daran, dass Monotouch sich mehr Speicher im Simulator als auf dem Gerät verwenden, da auf dem Simulator es schnell zu kompilieren abgestimmt worden ist (Debugging, so schnell wie möglich zu machen), während auf dem Gerät ist es abgestimmt für eine bessere Laufzeitleistung.