2009-03-28 18 views
9

Incluso la aplicación Cocoa de ventana en blanco estándar que se genera cuando se hace un nuevo proyecto Cocoa en Xcode usa casi 6 MB de memoria. ¿Cuál es el motivo de esto? ¿Es posible hacer que una aplicación use menos, o OS X simplemente administra la memoria de manera diferente para las aplicaciones de Cocoa?¿Por qué las aplicaciones de Cocoa usan tanta memoria?

No es que me queje. Sé que el rendimiento "ya no importa" (editar: lo que quiero decir es que importa menos que la legibilidad/mantenibilidad/el tiempo del programador). Tengo curiosidad.

+2

¿Soy el único molesto por la idea de que el rendimiento ya no importa? – BobbyShaftoe

+0

No es que el rendimiento no importe.Existe una compensación entre el rendimiento óptimo del 100% y el uso de un marco que agrega algunos gastos generales, pero hace que el desarrollo sea mucho más fácil. Así que sí, 6 MB para una ventana en blanco es alta, pero si el marco te permite desarrollar aplicaciones en menos tiempo, vale la pena. –

+1

¿Cómo está midiendo la cantidad de "ram" que utiliza una aplicación? ¿Estás mirando a RPRVT en la parte superior, o algo más? –

Respuesta

9

OS X hace mucha magia con las páginas de memoria compartida y de escritura por escritura, por lo que es probable que no se requiera mucha memoria RAM física para cada aplicación.

se puede comprobar con exactitud cómo se asignan los bloques de memoria ejecutando:

sudo vmmap <PID of the process> 
+4

También hay un problema muy básico: todas las ventanas en osx tienen doble búfer, por lo que 2 * ancho de la ventana * alto de la ventana * 4 bytes se usarán solo al abrir una ventana – olliej

1

Estoy un poco fuera de lugar aquí, pero creo que es porque todas las bibliotecas que se agregan tienen que establecerse un poco y no hay necesidad de recolectar basura, por lo que simplemente se desperdician memoria; Además, incluso si toda la memoria se volviera a publicar automáticamente, esperaría hasta el primer evento inactivo, que es posterior a la creación de la ventana. Elimine las bibliotecas/marcos innecesarios, o fuerce la recolección de basura en algún lugar después de cargar la ventana desde la punta y vea cuánto baja si está tan preocupado.

No me preocupa. Parte de la memoria puede ser devuelta más tarde, y el resto es el precio que paga por un marco potente.

4

Depende de todo el marco (API) que utilice. Combine eso con las asignaciones de VM hechas por operaciones de bajo nivel.

Solo vale la pena intentar reducir la asignación de montón (total), así como el tamaño residente del código. Asegurándose de que sus estructuras de datos se distribuyan de manera eficiente e intenten compilar con el siempre famoso indicador de optimización "-Os" (optimización del tamaño). No hay mucho que pueda hacer sobre el VM que come Cocoa. Realmente no me preocuparía por eso.

3

Esto es claramente un momento 'WTF' para los desarrolladores en general. La pregunta suele ser: ¿por qué mi aplicación trivial consume tanta memoria?

La respuesta está en el marco subyacente. Podría argumentar que 6 MB es demasiado, pero en realidad no es nada.

No es raro ver que las computadoras vienen con 2 GB de memoria actualmente. El stock de IMAC es de 4 GB. El objetivo de la industria informática es utilizar todos los recursos que tiene una máquina para que continúe evolucionando.

Sí, debe evitar las ineficacias siempre que sea posible (por ejemplo, no cargue una matriz de puntos de 5 millones en el arranque). Pero a menos que tu versión beta demuestre que has terminado, solo debes mantenerla en la lista de tareas pendientes.

1

Un factor que no está directamente relacionado con el cacao pero que es válido para los marcos en general es que la sobrecarga no es lineal. Generalmente hay un "precio" fijo y variable, en términos de sobrecarga, para usar el marco.

Cuando crea una ventana en blanco simple, la sobrecarga fija es aplastante, pero cuando crea una aplicación con decenas de ventanas, cuadros de diálogo, controles y todo, la sobrecarga fija inicial es insignificante, frente al tamaño de la aplicación.

Cuestiones relacionadas