在 C# 中将字符串转换为 byte[] 数组的最快方法是什么?我通过套接字发送大量字符串数据,需要优化每一个操作。目前我在发送之前将字符串转换为 byte[] 数组:
private static readonly Encoding encoding = new ASCIIEncoding();
//...
byte[] bytes = encoding.GetBytes(someString);
socket.Send(bytes);
//...
最佳答案
如果您的所有数据真的都将是 ASCII,那么您可以比 ASCIIEncoding
更快地完成它,后者具有各种(完全合理的)位错误处理等。您也可以通过避免始终创建新的字节数组来加快速度。假设您有一个上限,您的所有消息都将低于该上限:
void QuickAndDirtyAsciiEncode(string chars, byte[] buffer)
{
int length = chars.Length;
for (int i = 0; i < length; i++)
{
buffer[i] = (byte) (chars[i] & 0x7f);
}
}
然后你会做类似的事情:
readonly byte[] Buffer = new byte[8192]; // Reuse this repeatedly
...
QuickAndDirtyAsciiEncode(text, Buffer);
// We know ASCII takes one byte per character
socket.Send(Buffer, text.Length, SocketFlags.None);
虽然这是非常绝望的优化。我会坚持使用 ASCIIEncoding
,直到我证明这是瓶颈(或者至少这种糟糕的 hack 没有帮助)。
关于c# - 使用 ASCII 字符编码在 C# 中将字符串转换为 byte[] 数组的最快方法(性能方面),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1337895/