C# 如何通过网络快速发送数据?

C# 如何通过网络快速发送数据?,c#,.net,networking,serialization,C#,.net,Networking,Serialization,我有很多这样的数据 1:0x00a4c7d9fb3849… 2:0x79821309bd789c7689c97… 3:0x0178dce67fe898 它们的速率超过每秒100次,速度是最重要的(网络总是很忙) 我应该使用什么来传输数据(tcp/ip、管道、via等)? 我应该如何序列化它(BinaryFormatter、Xml、用户定义或任何更好的建议)?如果要发送大量数据,并且数据不重要,那么UDP是最佳选择。但是,这可能会丢失数据包(您可能会丢失一个数据集)。如果您的数据正在执行诸如更新实

我有很多这样的数据 1:0x00a4c7d9fb3849…
2:0x79821309bd789c7689c97…
3:0x0178dce67fe898

它们的速率超过每秒100次,速度是最重要的(网络总是很忙)

我应该使用什么来传输数据(tcp/ip、管道、via等)?

我应该如何序列化它(BinaryFormatter、Xml、用户定义或任何更好的建议)?

如果要发送大量数据,并且数据不重要,那么UDP是最佳选择。但是,这可能会丢失数据包(您可能会丢失一个数据集)。如果您的数据正在执行诸如更新实时图表之类的操作,这通常是很好的,因为缺少的值实际上并不重要


但是,如果丢失数据很关键,那么TCP/IP将是通过网络发送数据的最佳选择。鉴于数据速率很高,您最好制作自己的用户定义二进制格式,只发送/接收原始字节。使用Xml将变得越来越复杂(这意味着更多的开销)。即使是BinaryFormatter也会增加一些开销,因为序列化往往会增加比绝对必要的多一点。

这些字符串中每秒100个看起来不是太大的问题(或者字符串必须很长)

二进制总是比它的字符串代表更为简洁。您甚至可以先打包(使用zip或其他任何方式)


如果您希望完全控制发送,TCP/IP将是一个不错的选择。

这看起来像二进制数据(例如,可以打包到字节[]而不是使用字符串的数据)。为了获得最佳效率,您可以在TCP/IP之上设计自己的协议(使用TCP,甚至UDP),如果网络负载是一个大问题,甚至可以动态压缩数据。确保不要发送太多的小数据块,而是通过网络发送较大的数据块(例如,1400字节可能是一个合适的大小)。

100秒可能没有你想象的那么糟糕

如果其中每一个都是100字节(100个数字应该适合,没问题),那么100x100就是每秒10000字节,或者10Kbps


我会使用我最熟悉的东西,如果第一个解决方案不起作用,我会担心速度。构建第一个解决方案的想法将/将使构建第二个解决方案变得更加容易,并且您将更快地或同时获得最终产品,除非有更少的挫折感。

您知道一些用户定义序列化的好方法吗?我可以使用结构发送数据,但数据长度是可变的,我无法识别它们。通常,对于简单字符串,最简单的选择是将字符串长度(字节)作为int发送,然后将字符串作为字节发送。必要时重复。但是,这种类型需要TCP,因为您需要确保数据包的顺序正确。数据的时间关键性如何?我很想对数据进行批处理,可能是每秒发送一批,这样可以最大限度地减少每个数据包将要发送的头信息的浪费。它们至少有10k字节长,并且至少有30个客户端。