Я работаю над высокопроизводительным кодом, в котором эта конструкция является частью критической секции производительности.
Вот что происходит в каком-то разделе:
- A
string
сканируется, и метаданные эффективно сохраняются.
- На основании этих метаданных фрагменты основной строки разделяются на
char[][]
.
- То, что
char[][]
должно быть переведено в string[]
.
Теперь я знаю, что вы можете просто позвонить new string(char[])
, но тогда результат нужно будет скопировать.
Чтобы избежать этого дополнительного шага копирования, я предполагаю, что должна быть возможность записи непосредственно во внутренний буфер строки. Несмотря на то, что это было бы небезопасной операцией (и я знаю, что это принесет много последствий, таких как переполнение, прямая совместимость).
Я видел несколько способов достижения этого, но ни один из них меня не устраивал.
Есть ли у кого-нибудь верные предложения относительно того, как этого добиться?
Дополнительная информация:
Фактический процесс не включает в себя преобразование в char[]
обязательно, это практически операция с несколькими подстроками. Как 3 индекса и их длины.
У StringBuilder
слишком много служебной информации для небольшого числа concats.
EDIT:
В связи с некоторыми неясными аспектами того, что именно я спрашиваю, позвольте мне переформулировать это.
Вот что происходит:
- Основная строка проиндексирована.
- Части основной строки копируются в
char[]
.
-
char[]
преобразуется в string
.
Что я хотел бы сделать, это объединить шаги 2 и 3, в результате чего:
- Основная строка проиндексирована.
- Части основной строки копируются в
string
(и GC может держать его подальше от него во время процесса при правильном использовании ключевого слова fixed
?).
И обратите внимание, что я не могу изменить тип вывода со строки [], поскольку это внешняя библиотека, и проекты зависят от нее (обратная совместимость).