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?
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.
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
Slimtune profiler es la evolución del nprof, que le cambiaron el nombre o algo así.
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...
Blau, para ese creo que hace falta licencia de Sunburn engine.
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
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.
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.
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...
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).
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
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?
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 :( ).
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)
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.
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