C# 字符串到字节[]的快速转换

C# 字符串到字节[]的快速转换,c#,string,performance,byte,C#,String,Performance,Byte,目前,我正在使用以下代码将字符串转换为字节数组: var tempByte = System.Text.Encoding.UTF8.GetBytes(tempText); 在我的应用程序中,我经常调用这一行,我真的很想使用更快的一行。如何比默认的GetBytes方法更快地将字符串转换为字节数组?可能使用不安全的代码?如果您不太在意使用特定的编码,并且您的代码对性能至关重要(例如,它是某种DB序列化程序,需要每秒运行数百万次),请尝试 Edit:Marshal.Copy的速度大约是UTF8.Ge

目前,我正在使用以下代码将字符串转换为字节数组:

var tempByte = System.Text.Encoding.UTF8.GetBytes(tempText);

在我的应用程序中,我经常调用这一行,我真的很想使用更快的一行。如何比默认的GetBytes方法更快地将字符串转换为字节数组?可能使用不安全的代码?

如果您不太在意使用特定的编码,并且您的代码对性能至关重要(例如,它是某种DB序列化程序,需要每秒运行数百万次),请尝试

Edit
Marshal.Copy
的速度大约是
UTF8.GetBytes
的十倍,并且可以进行UTF-16编码。要将其转换回字符串,可以使用:

fixed (byte* bptr = tempByte)
{
    char* cptr = (char*)(bptr + offset);
    tempText = new string(cptr, 0, len / 2);
}

您是否a)实际遇到了性能问题,b)确定是这一部分导致了这些问题?我喜欢优化代码,根据分析器,这一行是最关键的一行。为什么不安全代码会有帮助?是什么让你认为这段代码是一个瓶颈?你凭什么认为它可以改进?您的性能要求是什么?
GetBytes
确实已经使用了不安全的代码。如果您需要大量使用UTF8,只使用字节数组可能比一直从Unicode转换为UTF8更快。这完全是奇怪的。通过使用UTF-16而不是UTF-8并解释事实,优化转换为UTF8,呃,具体是什么,NET字符串的内部内存表示形式已经是这种格式了,要获得它,您只需复制内存块,而不是将字符串逐个字符转换为所需的编码。我只是看不出它与明确而有意地转换为UTF8的问题有什么关系。如果您想要UTF16表示,那么答案中的代码也是毫无意义的。只需复制一份字符串引用!为什么还要麻烦字节[]。在这里使用不安全的代码似乎也毫无意义。我对惠勒有一个非常严重的问题,因为我的项目速度比使用的特定编码要重要得多(只要有快速解码的方法),所以我在这个话题上分享了我的观点。惠勒写道,他需要将字符串转换为字节数组,而我的代码片段就是这样做的。如果你不同意我的回答,你可以自由地投反对票并提供你的答案。我是从回答被问问题的角度来看这一点的,而不是解决提问者的问题。
fixed (byte* bptr = tempByte)
{
    char* cptr = (char*)(bptr + offset);
    tempText = new string(cptr, 0, len / 2);
}