2011-12-25 47 views
0

我正在爲使用tcpClient的網絡通信構建一些類。我有tcpserver類接受連接並將它們轉移到後臺線程,以便它可以繼續接受該端口上的連接。我可以使用多個客戶端連接到服務器,並執行從服務器到客戶端的文件傳輸。在我的開發機器上運行服務器和客戶端,我獲得了很好的文件傳輸速度(160 mbps左右 - 我正在使用大包數據包)。使用tcpClient進行文件傳輸的奇數減速

我正在測試來自多個客戶端的越來越大的文件傳輸,並且發現了一件奇怪的事情 - 當嘗試發送大文件(> 3gig)時,大約一半的傳輸速度開始緩慢並波動。如果我嘗試發送我的3 gig測試文件(一個.iso),同時還使用兩臺或三臺其他客戶端傳輸大文件(> 500meg),同時也在我的開發機器上運行,則.iso的傳輸可能會放慢抓取並停留那裏...即使在其他客戶完成接收文件之後,每秒1Mg甚至更低也是如此。無論如何,我也可以再次看到速度提升,並在每秒30至80兆克之間波動。

有沒有錯誤,並通過代碼篩選,我只是不知道放緩可能發生的地方。

這可能是一個線程的優先事項?我必須使用大的變量類型來處理文件傳輸的一些元素(一個用於文件大小的int64,另一個用於記錄到目前爲止已經進入的字節數量等)......我可以看到隨着這些變量的值變大而放緩?

任何幫助將不勝感激。

+0

好的......如果我在到達客戶端時沒有真正寫入文件字節,我根本沒有任何這些問題。當我嘗試將字節實際寫入客戶端中的文件時發生了一些情況。我只是用FileStream寫一個字節數組... – Pete 2011-12-25 21:43:54

回答

0

您是否考慮過接收和寫入磁盤之間的數據會發生什麼變化?即您是否將其緩存到內存數組中,如果是的話,您的應用程序的內存使用情況相對於整個系統內存是多少?

+0

另外,我注意到,當我複製> 3gig .iso時,減速似乎發生,就像文件大小跨越2個演出邊界一樣。從那裏直到文件結尾,我有很多奇怪的東西。網絡速度波動(我認爲是文件寫入速度問題)... – Pete 2011-12-26 16:13:26

+0

我正在使用網絡流和字節數組讀取字節。當字節數組充滿當前數據包時,我將其交給要寫入的文件流。 – Pete 2011-12-26 16:17:27

+0

隨着服務器和三個客戶端運行在Visual Studio中,它使用了28兆左右。我在機器上有12場演出。 – Pete 2011-12-26 16:27:11

0

我看到了在通過局域網編寫文件流時遇到的問題。假設您正在使用文件流來寫入文件。嘗試在寫入和讀取/寫入訪問之間切換訪問。我相信這是讀/寫訪問,它不能很好地清除更改。另外,我喜歡在文件寫入時看到文件大小的增加,但在寫入文件之前設置文件長度似乎會提高性能。