2011-05-10 95 views
0

嘿大家。 这个地方就像一个知识的金矿,它帮助我很多!我的下一个查询是:处理c#中的套接字服务器发送和接收的数据#

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

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

+2

向我们展示您目前的方法,证明效率低下,然后再回来。如果您认为字符串拆分效率低下,我几乎可以保证您的微型优化。 – 2011-05-10 07:04:05

回答

1

通常情况下,第一条数据是一个命令作为4位数字。我可以想象这不是非常有效!处理数据的最佳方式是有效地接收数据吗?

不,将数字转换为字符串或从字符串转换数字效率不高。但问题是:它真的很重要吗?这听起来像你试图做过早的优化。不要那样做。您的目标应该是编写易于阅读和维护的代码。除非有人真的抱怨表现,否则不要进行优化。

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

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

整个处理过程实际上取决于您对传入消息所做的操作。你提供了很少的信息来给出正确的答案。创建一个新的问题(因为在一个问题中的两个问题是不允许的)。添加显示您当前处理的代码并描述您不喜欢的内容。

0

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

我的建议是,你在命令的消息中保留一个固定大小的前缀。然后,您可以使用这些字节在O(1)中查找您应该执行的命令,该表可以用方法execute的对象填充。所以你可以做一些事情table[command].execute()。这就是说,我认为性能增益不会那么大,并且通过使用其中的一个序列化库,您的状况会更好(维护方面)。

相关问题