2009-03-28 13 views
9

Selbst die standardmäßige Cocoa-Anwendung für leere Fenster, die beim Erstellen eines neuen Cocoa-Projekts in Xcode erstellt wird, benötigt fast 6 MB Arbeitsspeicher. Was ist der Grund dafür? Ist es möglich, eine App weniger zu verwenden, oder verwaltet OS X Speicher einfach nur für Cocoa-Apps?Warum verbrauchen Cocoa Apps so viel Speicher?

Nicht, dass ich mich beschwere. Ich weiß, dass Leistung "kaum noch zählt" (edit: was ich meine ist, es zählt weniger als Lesbarkeit/Wartbarkeit/Programmierzeit). Ich bin nur Neugierig.

+2

Bin der Einzige verärgert über die Idee, dass die Leistung keine Rolle mehr spielt? – BobbyShaftoe

+0

Es ist nicht so, dass die Leistung keine Rolle spielt.Es gibt einen Kompromiss zwischen 100% optimaler Leistung und der Verwendung eines Frameworks, das zusätzlichen Aufwand verursacht, die Entwicklung jedoch erheblich vereinfacht. Also ja, 6 MB für ein leeres Fenster sind hoch, aber wenn das Framework es ermöglicht, Apps in kürzerer Zeit zu entwickeln, ist es das wert. –

+1

Wie messen Sie, wie viel "RAM" eine Anwendung verwendet? Schaust du auf RPRVT in Top oder etwas anderes? –

Antwort

9

OS X macht viel Spaß mit Shared Memory und Copy-on-Write-Seiten, so dass es wahrscheinlich nicht so viel physischen RAM für jede Anwendung braucht.

Sie können genau prüfen, wie Speicherblocks durch Ausführen abgebildet werden:

sudo vmmap <PID of the process> 
+4

Es gibt auch einen sehr einfachen Treffer: alle Fenster auf OSX sind doppelt gepuffert - also 2 * Fensterbreite * Fensterhöhe * 4 Bytes werden verwendet, nur um ein Fenster zu öffnen – olliej

1

Ich bin hier ein wenig aus dem Häuschen, aber ich denke, weil all die Bibliotheken, die hinzugefügt werden, ziemlich viel einrichten müssen und es keine Notwendigkeit gibt, Müll zu sammeln, so dass sie einfach verschwendet werden Erinnerung; Außerdem, selbst wenn der gesamte Speicher automatisch freigegeben wurde, würde er bis zum ersten idle-Ereignis warten, das nach der Erstellung des Fensters ist. Löschen Sie nicht benötigte Bibliotheken/Frameworks, oder erzwingen Sie nach dem Laden des Fensters von der Spitze eine Müllsammlung, und sehen Sie, wie viel es fällt, wenn Sie so besorgt sind.

Ich bin nicht besorgt darüber. Ein Teil des Speichers kann später zurückgegeben werden, und der Rest ist der Preis, den Sie für ein leistungsfähiges Framework bezahlen.

4

Hängt von all dem Framework (APIs) ab, das Sie verwenden. Kombinieren Sie das mit den VM-Zuweisungen, die von Low-Level-Ops durchgeführt werden.

Es lohnt sich nur, die Heap-Alloc (total) sowie die residente Größe des Codes zu reduzieren. Stellen Sie sicher, dass Ihre Datenstrukturen effizient zugeordnet sind und versuchen, mit dem immer so bekannten "-Os" -Optimierungsflag (Größenoptimierung) zu kompilieren. Es gibt nicht viel, was Sie über die von Cocoa gegessene VM tun können. Ich würde mir darüber keine Sorgen machen.

3

a ‚WTF‘ Moment für Entwickler in der Regel Dies ist eindeutig. Die Frage ist normalerweise - warum verbraucht meine triviale Anwendung so viel Speicher?

Die Antwort ist auf das zugrundeliegende Framework zurückzuführen. Man könnte argumentieren, dass 6MB zu viel ist, aber es ist wirklich nichts.

Es ist nicht selten, dass Computer heutzutage mit 2 GB Speicher ausgestattet sind. Die Aktie IMAC ist 4 GB. Der springende Punkt der Computerindustrie ist es, alle Ressourcen zu verbrauchen, die eine Maschine hat, damit sie sich weiter entwickelt.

Ja, Sie sollten Unzulänglichkeiten wo möglich vermeiden (Laden Sie nicht ein 5million Punkt-Array zum Start zum Beispiel). Aber wenn deine Beta nicht zeigt, dass du abgefuckt hast, behalte sie einfach auf der Liste der Aufgaben.

1

Ein Faktor, der nicht direkt mit Kakao verbunden ist, aber für Frameworks im Allgemeinen gilt, ist, dass der Overhead nicht linear ist. Es gibt normalerweise einen festen und einen variablen "Preis", um den Rahmen zu verwenden.

Wenn Sie ein einfaches leeres Fenster erstellen, ist der fixe Overhead erdrückend, aber wenn Sie eine Anwendung mit Dutzenden von Fenstern, Dialogen, Steuerelementen und allen erstellen, wird der anfängliche fixe Aufwand gegenüber der Größe der Anwendung vernachlässigbar.

Verwandte Themen