Foros - Stratos

Stratos => XNA => Mensaje iniciado por: Hans en 06 de Julio de 2011, 12:44:23 PM

Título: Usando CLRProfiler
Publicado por: Hans en 06 de Julio de 2011, 12:44:23 PM
Estoy intentando optimizar y esas cosas tan apasionantes y como todo el mundo recomendaba esto me he puesto con ello. El caso es que me ha costado hacer que no petara al iniciar la aplicación pero ahora lo hace le doy a view y no aparece nada y al finalizar la aplicación es como si no hubieran cargado nada, da resultados "vacíos". ¿Alguna idea? :P


Por cierto, con la consola imagino que no funciona, ¿me equivoco?

¿Tiene que ser la versiób debug o vale con release?
Título: Re: Usando CLRProfiler
Publicado por: WaaghMan en 07 de Julio de 2011, 10:41:54 AM
Yo tengo un .bat junto al .exe con estas dos líneas:

set COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler
clrprofiler


Y eso es lo que ejecuto. Tras ello me funciona correctamente. Y sí, debería funcionar tanto en Debug como en Release. Y no, no se puede usar en la consola. En la consola, aparte de lo que tú te programes, sólo funciona el remote performance monitor de XNA.

Lo que yo uso normalmente es el CLRProfiler para ver dónde se está generando basura (muy útil el GC Timeline), y el Slimtune profiler para ver qué partes son las que más tiempo de CPU consumen durante la ejecución.
Título: Re: Usando CLRProfiler
Publicado por: Hans en 07 de Julio de 2011, 11:28:30 AM
Lo del bat ya lo probé pero seguía sin funcionar, asi que investigando encontré que usando un programa llamado nprof para lanzar el profiler sí funcionaba. Muy rebuscado pero me ha servido para optimizar el problema principal que ocasionaba tirones en la consola (en el móvil no, usando el mismo código, en pc por supuesto no xDD) y que era por culpa de concatenar strings para calcular los nombres de las animaciones en tiempo de ejecución (se ve que los strings son mierda de la mala mala para el GC). Ahora va como la seda, sólo cambiando eso.

Me apunto lo de Slimtune profiler, gracias :P
Título: Re: Usando CLRProfiler
Publicado por: WaaghMan en 07 de Julio de 2011, 11:29:54 AM
Slimtune profiler es la evolución del nprof, que le cambiaron el nombre o algo así.
Título: Re: Usando CLRProfiler
Publicado por: blau en 07 de Julio de 2011, 11:34:29 AM
No lo he probado pero tiene muy buena pinta...

http://indiefreaks.com/2011/07/06/the-indiefreaks-game-profiler-for-xna-is-here/


es un componente que se ejecuta en el mismo juego y te hace el profiling.... si lo probais comentad que os ha parecido...
Título: Re: Usando CLRProfiler
Publicado por: Hans en 07 de Julio de 2011, 12:37:39 PM
Blau, para ese creo que hace falta licencia de Sunburn engine.
Título: Re: Usando CLRProfiler
Publicado por: blau en 07 de Julio de 2011, 03:44:13 PM
Pues no, no hace falta.

Citar
Requirements
Indiefreaks  Game  Profiler  for  Xna  games  works  on  any  XNA  game  project
(Windows, Xbox 360 or Windows Phone 7)
It only requires any Visual Studio 2010 SP1 edition and XNA 4.0 framework
Título: Re: Usando CLRProfiler
Publicado por: Hans en 07 de Julio de 2011, 04:35:08 PM
Lo he instalado y he seguido los pasos pero me cuando ejecuto me dice  "Common Language Runtime detectó un programa no válido." en un momento concreto de mi código. Estoy investigando a ver qué leches es.
Título: Re: Usando CLRProfiler
Publicado por: Vicente en 07 de Julio de 2011, 10:40:13 PM
Cita de: Hans en 07 de Julio de 2011, 11:28:30 AM
Lo del bat ya lo probé pero seguía sin funcionar, asi que investigando encontré que usando un programa llamado nprof para lanzar el profiler sí funcionaba. Muy rebuscado pero me ha servido para optimizar el problema principal que ocasionaba tirones en la consola (en el móvil no, usando el mismo código, en pc por supuesto no xDD) y que era por culpa de concatenar strings para calcular los nombres de las animaciones en tiempo de ejecución (se ve que los strings son mierda de la mala mala para el GC). Ahora va como la seda, sólo cambiando eso.

Me apunto lo de Slimtune profiler, gracias :P

Los strings son inmutables en .NET. Es decir, cuando realizas una operacion sobre un string, no modificas el string sino que generas un string nuevo. Es decir, si estas concatenando todo el rato pues estas creando nuevos objetos que viviaran muy poco, ergo basura para el GC, etc etc.
Título: Re: Usando CLRProfiler
Publicado por: [EX3] en 07 de Julio de 2011, 11:06:07 PM
Cita de: Vicente en 07 de Julio de 2011, 10:40:13 PM
Los strings son inmutables en .NET. Es decir, cuando realizas una operacion sobre un string, no modificas el string sino que generas un string nuevo. Es decir, si estas concatenando todo el rato pues estas creando nuevos objetos que viviaran muy poco, ergo basura para el GC, etc etc.
No era en estos casos donde resultaba optimo el StringBuilder?

Salu2...
Título: Re: Usando CLRProfiler
Publicado por: WaaghMan en 08 de Julio de 2011, 01:14:50 AM
Yo uso StringBuilder en casi todas partes por eso (Especialmente, el Mesh que usamos para pintar textos acepta strings y StringBuilders), pero la verdad es que es bastante más engorroso de utilizar que los strings a pelo, y en algunos casos la API no permite pasar StringBuilders como parámetros y no te queda más remedio que generar el string.

De un pack de DebugTools que hay por la página de XNA saqué un utilísimo método de extensión llamado AppendNumber() que te permite añadir números a un StringBuilder sin generar basura en el proceso (el Append() normal la genera si le pasas números).
Título: Re: Usando CLRProfiler
Publicado por: Hans en 08 de Julio de 2011, 10:33:43 AM
Sigo con el problemo de " Common Language Runtime detectó un programa no válido", así que me parece que voy a pasar del debugger. Me lo da en tiempo de ejecución en partes concretas del código sin ninguna relación aparente y siempre en las mismas. He buscado y hablan de que era un bug conocido en la versión de net 2.0 pero poco más, al parecer debido a un código extremadamente extenso. A saber xDD
Título: Re: Usando CLRProfiler
Publicado por: Hans en 08 de Julio de 2011, 03:07:57 PM
He estado optimizando más y pensando en varios aspectos de mi "motor". Si en una función paso un string por referencia el coste será mucho menor que si no lo hago así, ¿me equivoco?
Título: Re: Usando CLRProfiler
Publicado por: Vicente en 08 de Julio de 2011, 05:29:18 PM
Un string es un tipo por referencia, da lo mismo. Pasar cosas por referencia puede ser util cuando usas tipos por valor porque se copian (matrices, vectores, etc), y ademas el Jitter de Xbox no tengo ni idea de si puede hacer inline de eso (el de PC si, pero en el de Xbox no consigo que nadie me responda esa pregunta :( ).
Título: Re: Usando CLRProfiler
Publicado por: RendercodeGames en 11 de Julio de 2011, 12:14:03 PM
Deduzco que estáis utilizando la versión 2 del CLR Profiler?

Porqué no usáis la 4, que es la apropiada para XNA/NET 4? A mi me funciona sin tener que hacer ningún truco raro.

Enlace:
http://www.microsoft.com/download/en/details.aspx?id=16273 (http://www.microsoft.com/download/en/details.aspx?id=16273)
Título: Re: Usando CLRProfiler
Publicado por: WaaghMan en 12 de Julio de 2011, 03:01:28 PM
Me la he bajado y funciona, gracias  ;) . No la he probado mucho, pero aparte de lo de no necesitar el .bat no le ví ninguna novedad.
Título: Re: Usando CLRProfiler
Publicado por: Hans en 12 de Julio de 2011, 03:42:31 PM
Cita de: Máximo Décimo Meridio en 11 de Julio de 2011, 12:14:03 PM
Deduzco que estáis utilizando la versión 2 del CLR Profiler?

Porqué no usáis la 4, que es la apropiada para XNA/NET 4? A mi me funciona sin tener que hacer ningún truco raro.

Enlace:
http://www.microsoft.com/download/en/details.aspx?id=16273 (http://www.microsoft.com/download/en/details.aspx?id=16273)


Exacto, por alguna razón siempre encontraba la 2.0 y pensaba que no había más. Gracias :D