2011-12-02 4 views
6

Estoy haciendo un perfil de una aplicación con instrumentos. El perfilado se realiza utilizando la herramienta de Asignaciones de dos maneras:Ambigüedades en el uso de instrumentos para el desarrollo de iOS

  1. Al elegir directamente las asignaciones cuando corro la App para perfilar
  2. Por La elección de fugas cuando corro la aplicación de perfiles.

En ambos casos, tuve la herramienta de asignaciones habilitada para la prueba. Pero sorprendentemente, tuve dos tipos diferentes de Out para asignaciones en estos casos.

¿Se supone que deben comportarse de manera diferente? o este es un problema con los instrumentos.

El tiempo que el Perfil con fugas Herramienta:

en las asignaciones Gráfico: enter image description here 1. puedo obtener gran cantidad de picos en el gráfico, los bytes en directo y bytes totales son iguales. 2. Obtengo las banderas negras (creo que son una alarma sobre la advertencia de memoria) después de 1 minuto de uso. Luego, cuando aparece un conjunto de banderas, mi aplicación falla. (Esto ocurre a veces, incluso cuando se ejecuta directamente la aplicación en dispositivos)

El tiempo que el Perfil con la herramienta de asignación:

en las asignaciones Gráfico: enter image description here 1. No entiendo picos menudo como lo fue en el caso anterior. Los bytes en vivo siempre fueron mucho menos que los bytes totales. 2. He usado durante más de 20 minutos y nunca he recibido banderas negras.

Un hecho que llegué a saber es que, cuando los bytes en vivo y los bytes totales son iguales, el NSZombieEnabled podría habilitarse.

Alguno de ustedes ha encontrado este problema.

ACTUALIZACIÓN 1:

que se enfrentó a otro problema con el primer caso. Cada vez que hice un perfil después de una corta duración (en comparación con el perfil en el segundo caso), la aplicación recibió muchos Black Flags y mi aplicación se bloqueó. (Debido a la advertencia de la memoria)

Y cuando probé el paso a paso similar al uso de la aplicación, mi aplicación no se colgó y no obtuvo ninguna marca.

¿Por qué esta discrepancia?

Respuesta

9

En el primer caso, solo está rastreando las asignaciones en vivo porque la plantilla "Fugas" configura el instrumento de asignaciones de esa manera. En el segundo, está rastreando las asignaciones en vivo y desasignadas. (Como dijo CocoaFu).

Ambos son útiles, pero por razones ligeramente diferentes.

Solo el seguimiento de las asignaciones en vivo (en combinación con el Análisis de muestras, por lo general), es una excelente manera de analizar el crecimiento permanente del montón en su aplicación.Una vez que sepa lo que se queda para siempre, puede descubrir por qué y ver si hay formas de optimizarlo.

El seguimiento de todas las asignaciones, vivo y muerto, es un medio muy eficaz para rastrear el ancho de banda de asignación. Puede ordenar por bytes generales y comenzar con el # más grande. Eche un vistazo a todos los puntos de asignación (haga clic en la pequeña flecha al lado de la etiqueta en la Categoría de la fila seleccionada) y vea de dónde vienen todas las asignaciones.

Por ejemplo, su gráfico muestra que hay 1.27 MB de asignaciones de 14 bytes - 9218 asignaciones - durante ese período de tiempo. Todos han sido gratuitos() d [¡bien!], Pero eso aún representa un montón de trabajo para asignar, llenar con datos (presumiblemente), y liberar cada uno de ellos. Puede ser un problema, tal vez no.

(Para poner esto en perspectiva, utilicé esta técnica para optimizar una aplicación. Simplemente centrándome en reducir el # de transitorios - efímeras asignaciones, pude hacer los algoritmos primarios de la aplicación 5 veces más rápidos y reducir el uso de memoria en un 85%. resulta que la aplicación estaba copiando cadenas muchas, muchas, veces.)


No sé por qué se estrelló su aplicación como usted describió. Como es una advertencia de memoria, debería ver qué se asigna con mayor frecuencia.

Tenga en cuenta que si tiene habilitada la detección zombie, eso requiere mucha memoria adicional.

+0

bbum: gracias. He actualizado la pregunta. ¿Puedes aclarar mi duda? – Krishnan

2

Dependiendo de la forma en que se crean instancias de las asignaciones, existen diferentes opciones. Compruebe las opciones haciendo clic en el símbolo "i" en el mosaico Asignaciones.

Sí, me parece molesto también.

+0

¿Cuál elegir como el correcto? ¿De qué manera cada uno de ellos es diferente? – Krishnan

Cuestiones relacionadas