C# 字符串到字节数组的速度

Posted

技术标签:

【中文标题】C# 字符串到字节数组的速度【英文标题】:C# string to byte array speed 【发布时间】:2012-01-05 02:48:36 【问题描述】:

所以从这个问题出发:

Which is fast comparison: Convert.ToInt32(stringValue)==intValue or stringValue==intValue.ToString()

我正在寻找一种将我的联网应用程序存储在数据包中的基本类型。

理念:

    数据包类存储list(type) 向数据包类添加对象 序列化并在机器之间发送 反序列化为(type)(type) 转换为您最初添加的对象类型。

最初,我使用strings 作为(type)。但是,我有点怀疑,因为每次我想将int 转换为string,这似乎是一个任务处理过程。当我以 30FPS 的速度将包含大量 uints 的数据包传送到 strings 时,我想让这个过程尽可能快。

因此,我想知道byte[] 是否会是更合适的类型。在byte[]ints/stringsstringsints 之间来回转换的速度有多快?顺便说一句,我不会经常在网络上发送很多字符串。我要发送的几乎所有内容都是uints

【问题讨论】:

【参考方案1】:

如果您在两端使用相同的程序,请尽可能使用 BinarySerialization。你担心速度;但除非这只是在本地主机上的两个进程之间进行,否则实际的连线时间,更不用说延迟,将比任何真正的转换过程慢几个数量级。

当然,不要连接字符串;你会骗我的。

您需要在这里保存的是您的编码时间,以及滚动您自己的序列化时出错的可能性。如果您正确封装程序的数据传输部分,升级它们将很容易。尝试花额外的时间快速完成某些事情称为过早优化(谷歌搜索 - 这是一个有效的论点 - 大多数时间)。如果它是一个瓶颈,请利用您的封装设计并进行更改。如果您先完成它,您将不会花费那么多额外的时间 - 但最终可能根本不会花费那么多时间。

关于二进制序列化的警告。您发送的类型必须是相同的版本和类型名称。如果您可以轻松地将相同版本的两端投入生产,那就不用担心了。如果您需要更多,或者二进制序列化太慢,请查看FastJson,它承诺很大并且是免费的,或者类似的东西。

【讨论】:

【参考方案2】:

byte[] 是套接字操作的“自然”数据类型,所以这看起来很合适,ints/uints 转换也很快。字符串有点不同,但是如果你选择平台的自然编码,这也会很快。

【讨论】:

【参考方案3】:

Convert.ToInt32 相当快只要它不会失败。如果它失败了,那么你会产生巨大的抛出/捕获异常的开销。

byte [] 与其他类型的二分法是错误的。网络将所有信息传输为 - 本质上 - 一个字节数组。因此,无论是包裹在 NetworkStream 周围的 StreamReader 是将 byte [] 变成 String,还是您自己,它仍然在完成。

【讨论】:

以上是关于C# 字符串到字节数组的速度的主要内容,如果未能解决你的问题,请参考以下文章

C# 用户输入到字节数组

十六进制字符串到字节数组 C# [重复]

java和c#的字节数组转换问题

使用 Dllimport 将一个非常大的字符串作为字节数组从 C++ 传递到 C#

C# 和 Java 中的十六进制到字节数组给出不同的结果

C# 结构到字节数组封送产生 19 个元素而不是 20 个