Estoy trabajando en un juego Windows Phone 7 XNA. Es un puerto de un juego escrito en C++, y como tal, intento hacer la menor reescritura del código de juego posible.Cadenas mutables en WP7 C#/XNA?
basura es un gran problemaen WP7, debido a que el colector es nongenerational y lento, por lo que una colección (que se activa cada 1 MB) dura aproximadamente 10 ms por MB de asignaciones. Tengo la intención de utilizar el máximo de 90 MB disponible, por lo que estamos viendo un puesto de ~ 900 ms por cada MB de asignación.
He podido volver a trabajar las cosas para que no tengamos basura generada por cuadro, excepto en algunos casos de cadenas.
Parece que StringBuilder.ToString() genera basura, y el método descrito here no funciona en WP7.
Las dos cosas que tengo que hacer son: minutos
- Formato/segundos/centésimas como mm: SS.HH para la visualización de la pantalla. Aparentemente puedo hacer eso con un StringBuilder (usando métodos de extensión que no crean basura del boxeo de las entradas) y mostrar el StringBuilder directamente con SpriteBatch.
- Dividir una cadena de la forma "foo.bar.baz.qux" en una matriz en '.', Es decir {"foo", "bar", "baz", "qux"} y copiar un elemento en una tiempo en una serie de cadenas. Esto es para establecer el estado jerárquico de los actores del juego. También está directamente portado del juego original, y depende bastante de que funcione de esta manera. Realmente me gustaría evitar reescribirlo.
Si no se convierte gran cantidad de código para usar char [] en lugar de cadena, ¿hay alguna forma de tener cadenas mutables sin basura en C#?
Sólo una nota al margen mango tiene Generational GC http://blogs.msdn.com/b/abhinaba/archive/2011/04/13/generational-gc-in-windows-phone-mango.aspx – Terrance
También esto es una forma de hacer algo "más cercano" a las cadenas mutables http://stackoverflow.com/questions/6913435/how-to-get-a-list-of-mutable-strings – Terrance