Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





# strings y GC

Iniciado por XÑA, 17 de Enero de 2013, 08:31:10 PM

« anterior - próximo »

XÑA

El mundo del informático es un asco. :(
Resulta que hace un año hice una aplicación que reproducía pngs transparentes en windows phone 7. Estos png se iban cargando con un backgroundTask. La velocidad tenía que ser de 12 fps, y todo perfecto y fluido.
Pero hace unos meses rehice la aplicación, junto a un editor. La cuestión es que, en algunos casos, ya no me va a 12 fps, me baja a 6!!!! Y me hace frenadas como si el GC estuviera liberando porquería.

Entonces, he mirado las diferencias, y, en teoría, la versión nueva debería ser mejor, pero la verdad es que va mucho mejor la antigua!!

Hoy he probado el profiler de VStudio 2010, y he mirado en memoria, y he visto que tenía en TotalAmount un montonazo de memoria en ...¡strings!
La versión antigua cargaba toda la escena en un XML usando Deserialize. La nueva carga un archivo de texto usando string y string.Split y int(string)....
Pero bueno, eso se carga al principio y luego en teoría el GC debería cargárselo antes de empezar a ejecutar el background task y todo eso...

¿Alguna idea?

Gracias

bnl

No puedo ayudarte mucho. En general trabajar con cadenas es algo costoso porque se esta asignando memoria continuamente. Prueba a volver a usar la deserializacion desde xml o incluso desde binario si es posible.
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

Vicente

Estás usando GC.Collect para matar los strings?

XÑA

Lo de usar binario me resolvería el tema de los strings, desde luego tendría menos, pero yo creía que la gran ventaja es que cargaba y listo, memoria liberada, porqué casi todos los string son variables locales a un método...

Como voy cargando y mostrando imágenes, tengo que llamar a GC.Collect para que cada x frames vaya liberando recursos y poder seguir cargando las imágenes...


bnl

Lo de invocar al GC, en general, esta desaconsejado. Es mejor delegar en el CLR la gestion de la memoria.
Prueba a comentar esa linea a ver si mejora el rendimiento.
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

[EX3]

#5
Cita de: bnl en 17 de Enero de 2013, 10:38:28 PM
Prueba a volver a usar la deserializacion desde xml o incluso desde binario si es posible.
Cita de: XÑA en 18 de Enero de 2013, 07:52:34 AM
Lo de usar binario me resolvería el tema de los strings, desde luego tendría menos, pero yo creía que la gran ventaja es que cargaba y listo, memoria liberada, porqué casi todos los string son variables locales a un método...
Si estamos hablando de Windows Phone (o XBox360 si terciara) olvídate de usar serializacion binaria. Que yo sepa no esta soportada por el framework en estas plataformas, solo en PC :-/

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

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






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.