我需要将C#字符串写入编码为Utf8的预分配非托管缓冲区。 在 回复之前,请阅读以下 要求 :
目前,我正在使用OpCodes.Cpblk将原始字符串从C#复制到使用16位字符的非托管缓冲区。这给了我与在x64架构上使用非托管memcpy大致相同的性能,我真的需要吞吐量接近它。
我正在考虑将修复字符串作为 char *并对其进行迭代,但是实现没有跳转表的编码器既麻烦又不够理想表现。
答案 0 :(得分:6)
使用不安全的重载
public override unsafe int GetChars(byte* bytes, int byteCount, char* chars, int charCount)
的UTF8Encoding-class。您需要指定指向字符串的指针和将接收字符的字节缓冲区。它会将UTF-8字符复制到其中。不会发生任何分配,但需要不安全的代码。