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/strings
与strings
到ints
之间来回转换的速度有多快?顺便说一句,我不会经常在网络上发送很多字符串。我要发送的几乎所有内容都是uints
。
【问题讨论】:
【参考方案1】:如果您在两端使用相同的程序,请尽可能使用 BinarySerialization。你担心速度;但除非这只是在本地主机上的两个进程之间进行,否则实际的连线时间,更不用说延迟,将比任何真正的转换过程慢几个数量级。
当然,不要连接字符串;你会骗我的。
您需要在这里保存的是您的编码时间,以及滚动您自己的序列化时出错的可能性。如果您正确封装程序的数据传输部分,升级它们将很容易。尝试花额外的时间快速完成某些事情称为过早优化(谷歌搜索 - 这是一个有效的论点 - 大多数时间)。如果它是一个瓶颈,请利用您的封装设计并进行更改。如果您先完成它,您将不会花费那么多额外的时间 - 但最终可能根本不会花费那么多时间。
关于二进制序列化的警告。您发送的类型必须是相同的版本和类型名称。如果您可以轻松地将相同版本的两端投入生产,那就不用担心了。如果您需要更多,或者二进制序列化太慢,请查看FastJson,它承诺很大并且是免费的,或者类似的东西。
【讨论】:
【参考方案2】:byte[] 是套接字操作的“自然”数据类型,所以这看起来很合适,ints/uints 转换也很快。字符串有点不同,但是如果你选择平台的自然编码,这也会很快。
【讨论】:
【参考方案3】:Convert.ToInt32
相当快只要它不会失败。如果它失败了,那么你会产生巨大的抛出/捕获异常的开销。
byte []
与其他类型的二分法是错误的。网络将所有信息传输为 - 本质上 - 一个字节数组。因此,无论是包裹在 NetworkStream
周围的 StreamReader
是将 byte []
变成 String
,还是您自己,它仍然在完成。
【讨论】:
以上是关于C# 字符串到字节数组的速度的主要内容,如果未能解决你的问题,请参考以下文章