目前我正在使用这段代码将字符串转换为字节数组:
var tempByte = System.Text.Encoding.UTF8.GetBytes(tempText);
我在应用程序中经常调用这条语句,我真的想使用一个更快的方法。如何比默认的GetBytes方法更快地将字符串转换为字节数组?也许可以用不安全代码?
目前我正在使用这段代码将字符串转换为字节数组:
var tempByte = System.Text.Encoding.UTF8.GetBytes(tempText);
我在应用程序中经常调用这条语句,我真的想使用一个更快的方法。如何比默认的GetBytes方法更快地将字符串转换为字节数组?也许可以用不安全代码?
如果您不太关心使用特定的编码,并且您的代码对性能非常关键(例如它是某种数据库序列化程序,并且需要每秒运行数百万次),请尝试
fixed (void* ptr = tempText)
{
System.Runtime.InteropServices.Marshal.Copy(new IntPtr(ptr), tempByte, 0, len);
}
编辑: Marshal.Copy
的速度大约比 UTF8.GetBytes
快十倍,同时它可以获得 UTF-16 编码。如果需要将其转换回字符串,则可以使用以下方法:
fixed (byte* bptr = tempByte)
{
char* cptr = (char*)(bptr + offset);
tempText = new string(cptr, 0, len / 2);
}
GetBytes
已经使用了不安全的代码。 - Peter Ritchie