Sto lavorando a un gioco XNA di Windows Phone 7. È un porting di un gioco scritto in C++ e, come tale, sto cercando di fare il minimo riscrittura del codice del gameplay possibile.Stringhe mutabili in WP7 C#/XNA?
Garbage è un enorme problemasu WP7, perché il collettore è nongenerational e lento, quindi una collezione (che viene attivato ogni 1MB) richiede circa 10ms per MB di allocazioni. Intendo utilizzare pienamente i 90 MB massimi disponibili, quindi stiamo osservando uno stallo di ~ 900 ms ogni MB di allocazione.
Sono stato in grado di rielaborare le cose in modo che non abbiamo generato il garbage per-frame, tranne alcuni casi di stringhe.
Sembra che StringBuilder.ToString() generi rifiuti e il metodo descritto here non funzioni su WP7.
Le due cose che devo fare sono:
- formato minuti/secondi/centesimi come mm: ss.hh per la visualizzazione sullo schermo. Apparentemente posso farlo con un StringBuilder (usando i metodi di estensione che non creano garbage da inscatolare i pollici) e visualizzare lo StringBuilder direttamente con SpriteBatch.
- Dividere una stringa del modulo "foo.bar.baz.qux" in un array su ".", Cioè {"foo", "bar", "baz", "qux"} e copiare un elemento in un tempo in una serie di stringhe. Questo è per impostare lo stato gerarchico degli attori del gioco. È anche praticamente trasferito direttamente dal gioco originale, e molto dipende dal fatto che funzioni in questo modo. Mi piacerebbe davvero evitare di riscriverlo.
A parte la conversione di un sacco di codice per l'utilizzo di char [] anziché di stringa, esiste un modo per avere stringhe veramente modificabili senza spazzatura in C#?
Solo una nota laterale mango ha GC generazionale http://blogs.msdn.com/b/abhinaba/archive/2011/04/13/generational-gc-in-windows-phone-mango.aspx – Terrance
Anche questo è un modo per creare qualcosa di "più vicino" alle stringhe mutabili http://stackoverflow.com/questions/6913435/how-to-get-a-list-of-mutable-strings – Terrance