c#字符串到字节数组的速度
本文关键字:速度 数组 到字节 字符串 | 更新日期: 2023-09-27 18:19:25
从这个问题开始:
这是快速比较:Convert.ToInt32(stringValue)==intValue或stringValue==intValue. tostring ()
我正在寻找一个基本类型为我的网络应用程序存储在数据包。
:
- 包类存储
(type)
的list
- 向包类中添加对象
- 序列化并在机器之间发送
- 反序列化成
(type)
- 将
(type)
转换为您最初添加的对象类型。
最初,我使用strings
作为(type)
。然而,我有点怀疑,因为每次我想将int
转换为string
,这似乎是一个任务过程。当我以30FPS的速度通信包含大量uints
到strings
的数据包时,我希望使这个过程尽可能快。
因此,我想知道byte[]
是否是一个更合适的类型。在byte[]
和ints/strings
与strings
到ints
之间来回转换的速度有多快?顺便说一句,我不会经常在网络上发送很多字符串。我将发送的几乎所有内容都是uints
。
如果在两端使用相同的程序,请尽可能使用BinarySerialization。你担心速度;但是,除非这只是在本地主机上的两个进程之间进行,否则实际的连接时间(更不用说延迟)将比任何实际的转换过程慢几个数量级。
当然,不要连接字符串;你会把我变成一个骗子的。
这里需要节省的是编码时间,以及滚动自己的序列化时可能出现的错误。如果您正确封装了程序的数据传输部分,那么升级它们将很容易。试图花额外的时间做一些快速的事情被称为过早优化(谷歌它-这是一个有效的论点-大多数时间)。如果它是一个瓶颈,那么利用您的封装设计并对其进行更改。如果你先做了,你就不会花那么多额外的时间——但很可能最终根本不会花那么多时间。
关于二进制序列化的警告。发送的类型必须是相同的版本和类型名称。如果您可以在两端轻松地将相同的版本投入生产,则无需担心。如果你需要更多的东西,或者二进制序列化太慢,看看FastJson,它做出了很大的承诺,而且是免费的,或者类似的东西。
byte[]是套接字操作的"自然"数据类型,所以这似乎是一个很好的选择,int/units转换起来也会非常快。字符串有点不同,但如果您选择平台的自然编码,这也会很快。
Convert.ToInt32
是相当快的只要它不失败。如果它失败了,那么你就会产生抛出/捕获异常的开销,这是一个巨大的开销。
byte []
与其他类型二分法为假。网络以字节数组的形式传输所有信息。因此,无论包裹在NetworkStream
上的StreamReader
是把byte []
变成String
,还是你自己,它仍然在完成。