我需要将 C# 字符串写入编码为 Utf8 的预分配非托管缓冲区。在回答之前,请阅读以下要求:
- 没有新的分配(所以请不要让我回答涉及创建字节数组或其他实例化的问题)
- 没有到非托管代码的转换(没有 pinvoke/calli)
目前,我正在使用 OpCodes.Cpblk 使用 16 位字符将原始字符串从 C# 复制到非托管缓冲区。这给了我与在 x64 架构上使用非托管 memcpy 大致相同的性能,我真的需要接近那个吞吐量。
我正在考虑将字符串固定为char * 并对其进行迭代,但是在性能方面实现没有跳转表的编码器既麻烦又不理想。