Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Usando CLRProfiler

Iniciado por Hans, 06 de Julio de 2011, 12:44:23 PM

« anterior - próximo »

Hans

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?

WaaghMan

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.
Milkstone Studios - Autores de Avatar Ninja!, Little Racers, MotorHEAT y Wool en Xbox Live Indie Games

Hans

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

WaaghMan

Slimtune profiler es la evolución del nprof, que le cambiaron el nombre o algo así.
Milkstone Studios - Autores de Avatar Ninja!, Little Racers, MotorHEAT y Wool en Xbox Live Indie Games

blau

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...

Hans

Blau, para ese creo que hace falta licencia de Sunburn engine.

blau

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

Hans

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.

Vicente

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.

[EX3]

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...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

WaaghMan

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).
Milkstone Studios - Autores de Avatar Ninja!, Little Racers, MotorHEAT y Wool en Xbox Live Indie Games

Hans

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

Hans

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?

Vicente

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 :( ).

RendercodeGames

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






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.