[英]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.