我将字节数据发送到我的c#套接字服务器。我将它转换为ascii字符串,然后根据常用字符(如bar |字符)拆分数据并使用数据。通常,第一条数据是作为4位数字的命令。我可以想象这不是很有效!处理数据的最佳方法是有效接收?
相关,我如何捕获和处理命令?多个if语句或大型case / switch语句。我真的需要速度和效率。
答案 0 :(得分:1)
通常,第一条数据是一个4位数的命令。我可以想象这不是很有效!处理数据的最佳方法是接收,有效吗?
不,将数字转换为字符串或从字符串转换数字效率不高。但问题是:它真的重要吗?听起来像你正试图做过早的优化。不要那样做。您的目标应该是编写易于阅读和维护的代码。在有人真正抱怨性能之前,不要做优化。
相关,我如何捕获和处理命令?多个if语句或大型case / switch语句。我真的需要速度和效率。
再次。确定命令处理确实是应用程序的瓶颈。
整个处理实际上取决于您对传入消息的处理方式。您提供了一些信息来提供正确的答案。创建一个新问题(因为实际上不允许两个问题)。添加显示当前处理的代码并描述您不喜欢的内容。
答案 1 :(得分:0)
如果你真的需要性能,我猜你不应该为你的命令使用字符串表示,而是直接在字节上工作。字符串格式的四个数字是64位中的32位(取决于您使用的字符集),而单个字节足以存储四位数字。使用大量分支(if
- 语句)也会影响您的表现。
我的建议是在邮件中为命令保留固定大小的前缀。然后,您可以使用这些字节在表中的O(1)中查找您应该执行的命令,该表可以填充具有方法execute
的对象。所以你可以做一些事情table[command].execute()
。
话虽如此,我不认为性能增益会那么大,并且通过使用其中一个序列化库,你会更好(维护方面)。