Unsafe string creation from char[]

Я работаю над высокопроизводительным кодом, в котором эта конструкция является частью критической секции производительности.

Вот что происходит в некоторой секции:

  1. Строка строка "сканируется" и метаданные эффективно сохраняются.
  2. На основе этих метаданных фрагменты основной строки разделяются на char[][][].
  3. Этот char[][][] должен быть передан в string[].

Теперь я знаю, что можно просто вызвать new string(char[]), но тогда результат придется копировать.

Чтобы избежать этого дополнительного шага копирования, я полагаю, что должна быть возможность записывать непосредственно во внутренний буфер строки. Даже если это будет небезопасная операция (и я знаю, что это влечет за собой множество последствий, таких как переполнение, прямая совместимость).

Я видел несколько способов достижения этой цели, но ни один из них меня не устраивает.

Есть ли у кого-нибудь верные предложения, как этого добиться?

Дополнительная информация:
Фактический процесс не включает преобразование в char[] обязательно, это практически операция 'multi-substring'. Например, 3 индекса и их длины добавляются.

У StringBuilder слишком много накладных расходов для небольшого количества конкатенаций.

EDIT:
Из-за некоторых неясных аспектов того, что именно я спрашиваю, позвольте мне переформулировать это.

Вот что происходит:

  1. Основная строка индексируется.
  2. Части основной строки копируются в char[].
  3. Строка char[] преобразуется в string.

Я хотел бы объединить шаги 2 и 3, в результате чего получится:

  1. Основная строка индексируется.
  2. Части основной строки копируются в string (и GC может не лезть туда во время процесса, правильно используя ключевое слово fixed?).

И примечание: я не могу изменить тип вывода с string[], поскольку это внешняя библиотека, и проекты зависят от нее (обратная совместимость).

7
задан Aidiakapi 11 January 2012 в 22:53
поделиться