c# - 使用 ASCII 字符编码在 C# 中将字符串转换为 byte[] 数组的最快方法(性能方面)

标签 c# string performance byte ascii

在 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/

相关文章:

c# - 构建允许将函数作为参数传入的通用 c# 函数

c# - .NET 进程中可以存在的线程数是否有硬性限制?

c# - 如何使用 Windows 应用程序在服务器上执行 shell 脚本

android - 我应该如何编写 SQLite 查询,以便它在数据库中搜索与字符串数组中的字符串匹配的字符串?

string - MIPS - 检查数组的元素是否为空终止字符

java - 为什么 System.nanoTime() 比 System.currentTimeMillis() 慢(在性能上)?

database - 改善快速增长的数据库中的查询时间?

javascript - jQuery - 当点击元素太快时动画会出现问题

c# - PreRequestFilters 之前的 ServiceStack 请求处理延迟

javascript - 在应用 html.replace() 之前将正则表达式结果转换为小写