繁体   English   中英

在C#中处理套接字服务器发送和接收的数据

[英]Processing data sent and received by a socket server in c#

嘿大家。 这个地方就像知识的金矿,对我有很大帮助! 我的下一个查询是:

我将字节数据发送到我的C#套接字服务器。 我将其转换为ascii字符串,然后根据常见字符(如bar |字符)分割数据并使用数据。 通常,第一条数据是一个4位数字的命令。 我可以想象这不是很有效! 高效处理接收数据的最佳方法是什么?

相关,我如何捕获和处理命令? 多个if语句或大写的case / switch语句。 我真的需要速度和效率。

通常,第一条数据是一个4位数字的命令。 我可以想象这不是很有效! 高效处理接收数据的最佳方法是什么?

不,将数字转换为字符串或从字符串转换数字效率不高。 但是问题是:真的重要吗? 在我看来,您正在尝试进行过早的优化。 不要那样做。 您的目标应该是编写易于阅读和维护的代码。 在有人真正抱怨性能之前,不要进行优化。

相关,我如何捕获和处理命令? 多个if语句或大写的case / switch语句。 我真的需要速度和效率。

再次。 确定命令处理确实是应用程序的瓶颈。

整个处理过程实际上取决于您对传入消息的处理方式。 您提供了一些信息来给出正确答案的方法。 创建一个新问题(因为实际上不允许一个问题中包含两个问题)。 添加代码以显示您当前的处理方式并描述您对此不满意的地方。

如果您确实需要性能,我想您不应在命令中使用字符串表示形式,而应直接在字节上工作。 字符串格式的四个数字的大小为32个64位(取决于您使用的字符集),而一个字节就足以存储一个四位数的数字。 使用很多分支( if -statements的话)也会影响您的性能。

我的建议是在命令的消息中保留一个固定大小的前缀。 然后,您可以使用这些字节在应执行命令的表中的O(1)中查找,该表可以填充有具有execute方法的对象。 因此,您可以执行table[command].execute()

话虽这么说,我认为性能提升不会那么大,而您可以使用其中的一个序列化库来更好地维护(在维护方面)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM