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

本文关键字:速度 数组 到字节 字符串 | 更新日期: 2023-09-27 18:19:25

从这个问题开始:

这是快速比较:Convert.ToInt32(stringValue)==intValue或stringValue==intValue. tostring ()

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

:

  1. 包类存储(type)list
  2. 向包类中添加对象
  3. 序列化并在机器之间发送
  4. 反序列化成(type)
  5. (type)转换为您最初添加的对象类型。

最初,我使用strings作为(type)。然而,我有点怀疑,因为每次我想将int转换为string,这似乎是一个任务过程。当我以30FPS的速度通信包含大量uintsstrings的数据包时,我希望使这个过程尽可能快。

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

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

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

当然,不要连接字符串;你会把我变成一个骗子的。

这里需要节省的是编码时间,以及滚动自己的序列化时可能出现的错误。如果您正确封装了程序的数据传输部分,那么升级它们将很容易。试图花额外的时间做一些快速的事情被称为过早优化(谷歌它-这是一个有效的论点-大多数时间)。如果它是一个瓶颈,那么利用您的封装设计并对其进行更改。如果你先做了,你就不会花那么多额外的时间——但很可能最终根本不会花那么多时间。

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

byte[]是套接字操作的"自然"数据类型,所以这似乎是一个很好的选择,int/units转换起来也会非常快。字符串有点不同,但如果您选择平台的自然编码,这也会很快。

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

byte []与其他类型二分法为假。网络以字节数组的形式传输所有信息。因此,无论包裹在NetworkStream上的StreamReader是把byte []变成String,还是你自己,它仍然在完成。