Мне нужно записать строку C # в предварительно выделенный неуправляемый буфер, закодированный как Utf8. Перед ответом, пожалуйста, прочитайте следующие требования :
- Нет новые выделения (поэтому, пожалуйста, не направляйте меня к ответам, связанным с созданием байтовых массивов или другими экземплярами)
- Нет Переход к неуправляемому коду (без pinvoke / calli)
В настоящее время я использую OpCodes.Cpblk для копирования необработанных строк из C # в неуправляемые буферы, используя 16-битные символы. Это дает мне примерно ту же производительность, что и использование неуправляемого memcpy в архитектуре x64, и мне действительно нужно, чтобы пропускная способность была близка к этому.
Я рассматриваю исправление строки как char * и итерацию по ней, но реализация кодера без таблиц переходов была бы громоздкой и менее оптимальной, когда дело доходит до производительности .