問題描述: 現(xiàn)在準(zhǔn)備用C#開發(fā)一臺數(shù)據(jù)接收服務(wù)器(高速、海量的數(shù)據(jù)、對實(shí)時性要求高且不能丟包?,數(shù)據(jù)包格式為定義好的結(jié)構(gòu)體)。數(shù)據(jù)源(發(fā)送數(shù)據(jù)的服務(wù)器)服務(wù)器端程序由C/C++開發(fā)。數(shù)據(jù)接收服務(wù)器與數(shù)據(jù)源服務(wù)器之間用TCP Socket通信。 接收數(shù)據(jù)時有兩種方式,第一種是把接收到的C++結(jié)構(gòu)體,轉(zhuǎn)換為C#對應(yīng)的結(jié)構(gòu)體形式,網(wǎng)上有轉(zhuǎn)換參考代碼,這里不詳細(xì)說。第二種是讀取數(shù)據(jù)包的字節(jié),然后轉(zhuǎn)換為相應(yīng)的數(shù)據(jù)類型,比如,在C++語言結(jié)構(gòu)體中第一個字段為int型(占四個字節(jié)),在C#中轉(zhuǎn)換時,從接收到的結(jié)構(gòu)體字節(jié)數(shù)組中讀取4個字節(jié),然后強(qiáng)制類型轉(zhuǎn)換為int型,以前做股票程序時,這種方式我用過,確實(shí)可行。 提問:以前兩種用C#接收數(shù)據(jù)的方式哪一種效率更高(即對CPU的性能損失較少;不會導(dǎo)致數(shù)據(jù)接收緩沖區(qū)內(nèi)積累大量的數(shù)據(jù)來不及處理而發(fā)生丟包現(xiàn)象),或都哪位朋友有更好的建議?我的看法是兩種速度差不多,因?yàn)槎际窃趦?nèi)存進(jìn)行處理的,不過接下來幾天我會拿兩者做壓力測試,自己求證一下。但我是希望高手給我分析一下,不勝感激。 再提問:有沒有辦法控制TCP連接中,數(shù)據(jù)接收緩沖區(qū)的大??? 期望高手的回答。
1 回答

呼啦一陣風(fēng)
TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個贊
第一種要高,因?yàn)闄C(jī)器硬件目前一般都是32位或者64位的,批量拷貝肯定比一個字節(jié)一個字節(jié)的拷貝和轉(zhuǎn)換要快很多。
C# 中 數(shù)據(jù)接收緩沖區(qū)是通過 ReceiveBufferSize 來調(diào)整的,你用 C/C++ 不知道你是通過什么方式來做,是直接調(diào)用 socket 的 windows api 呢,還是用 C++ 封裝好的類,所以暫時無法回答你第二個問題。
- 1 回答
- 0 關(guān)注
- 466 瀏覽
添加回答
舉報
0/150
提交
取消