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

时间:2012-01-05 02:48:36

标签: c# performance networking types profiling

关于这个问题:

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

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

理念:

  1. 数据包类存储list (type)
  2. 将对象添加到数据包类
  3. 在机器之间序列化并发送
  4. 反序列化为(type)
  5. (type)转换为您最初添加的对象类型。
  6. 最初,我使用strings作为(type)。但是,每次我想将int转换为string时,我都有点可疑,这似乎是一个任务过程。当我以30FPS通信包含大量uintsstrings的数据包时,我想尽快完成此过程。

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

3 个答案:

答案 0 :(得分:1)

byte []是套接字操作的“自然”数据类型,因此这看起来很合适,也可以非常快速地进行转换。字符串有点不同,但如果您选择平台的自然编码,这也会很快。

答案 1 :(得分:1)

Convert.ToInt32速度非常快只要它没有失败。如果它失败了那么你就会招致抛出/捕获的异常的开销。

byte []与其他类型的二分法相比是错误的。网络传输所有信息 - 基本上 - 一个字节数组。因此,StreamReader缠绕NetworkStream是否将byte []转变为String,或者您自己是否已经完成。

答案 2 :(得分:1)

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

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

您需要在此处保存的是您的编码时间,以及滚动您自己的序列化时出错的可能性。如果正确封装程序的数据传输部分,升级它们将很容易。试图花费额外的时间来制作快速的东西被称为过早优化(google it - 它是一个有效的参数 - 大多数当时)。如果它是瓶颈,请利用封装设计并进行更改。如果你先做的话,你不会花费那么多额外的时间 - 但可能最终不会花费那么多时间。

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