Я работаю над игрой Windows Phone 7 XNA. Это порт игры, написанный на С++, и как таковой, я стараюсь как можно меньше переписывать код геймплея.
Мусор - это огромная проблема для WP7, потому что сборщик является негенеративным и медленным, поэтому сбор (который запускается каждые 1 МБ) занимает около 10 мс на МБ распределений. Я полностью намерен использовать максимально доступный 90 МБ, поэтому мы смотрим на 900 мс, останавливая каждый МБ размещения.
Я смог переделать вещи так, чтобы у нас не было мусора, созданного за кадр, за исключением нескольких случаев строк.
Кажется, что StringBuilder.ToString() генерирует мусор, а метод, описанный здесь, не работает на WP7.
Мне нужно сделать две вещи:
- Отформатируйте минуты/секунды/hundreths как mm: ss.hh для отображения на экране. По-видимому, я могу сделать это с помощью StringBuilder (используя методы расширения, которые не создают мусор из бокса в int) и отображать StringBuilder напрямую с помощью SpriteBatch.
- Разделите строку формы "foo.bar.baz.qux" на массив на ".", то есть { "foo", "bar", "baz", "qux" } и скопируйте один элемент на время в массив строк. Это для установки иерархического состояния игровых игроков. Он также почти полностью переносится из оригинальной игры и совсем немного зависит от того, как он работает именно так. Я бы очень хотел, чтобы не переписывать его.
За исключением преобразования большого количества кода для использования char [] вместо строки, есть ли способ иметь действительно мусорные переменные строки в С#?