关于这个问题:
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
。
答案 0 :(得分:1)
byte []是套接字操作的“自然”数据类型,因此这看起来很合适,也可以非常快速地进行转换。字符串有点不同,但如果您选择平台的自然编码,这也会很快。
答案 1 :(得分:1)
Convert.ToInt32
速度非常快只要它没有失败。如果它失败了那么你就会招致抛出/捕获的异常的开销。
byte []
与其他类型的二分法相比是错误的。网络传输所有信息 - 基本上 - 一个字节数组。因此,StreamReader
缠绕NetworkStream
是否将byte []
转变为String
,或者您自己是否已经完成。
答案 2 :(得分:1)
如果您在两端使用相同的程序,请尽可能使用BinarySerialization。你担心速度;但除非这只是在本地主机上的两个进程之间进行,实际的线路时间,更不用说latancy,将比任何实际的转换过程慢几个数量级。
当然,不要连接字符串;你会骗我的。
您需要在此处保存的是您的编码时间,以及滚动您自己的序列化时出错的可能性。如果正确封装程序的数据传输部分,升级它们将很容易。试图花费额外的时间来制作快速的东西被称为过早优化(google it - 它是一个有效的参数 - 大多数当时)。如果它是瓶颈,请利用封装设计并进行更改。如果你先做的话,你不会花费那么多额外的时间 - 但可能最终不会花费那么多时间。
关于二进制序列化的警告。您要发送的类型必须是相同的版本和类型名称。如果您可以轻松地将相同版本投入到生产中,那就不用担心了。如果你需要更多,或二元序列化太慢,请查看FastJson,这是一个很大的承诺,是免费的,或类似的东西。