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

时间:2011-05-10 07:00:02

标签: c# .net sockets networking

嘿大家好 这个地方就像知识的金矿,它帮助了我这么多!我的下一个问题是:

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

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

2 个答案:

答案 0 :(得分:1)

  

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

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

  

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

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

整个处理实际上取决于您对传入消息的处理方式。您提供了一些信息来提供正确的答案。创建一个新问题(因为实际上不允许两个问题)。添加显示当前处理的代码并描述您不喜欢的内容。

答案 1 :(得分:0)

如果你真的需要性能,我猜你不应该为你的命令使用字符串表示,而是直接在字节上工作。字符串格式的四个数字是64位中的32位(取决于您使用的字符集),而单个字节足以存储四位数字。使用大量分支(if - 语句)也会影响您的表现。

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

话虽如此,我不认为性能增益会那么大,并且通过使用其中一个序列化库,你会更好(维护方面)。