2011-05-10 77 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()。這就是說,我認爲性能增益不會那麼大,並且通過使用其中的一個序列化庫,您的狀況會更好(維護方面)。

相關問題