簡體   English   中英

在局域網上以最大速度傳輸文件

[英]File Transfer with Maximum Speed on LAN

幾乎所有的文件傳輸軟件(例如[NetSupport,Radmin,PcAnyWhere ..])以及我在應用程序中使用的不同代碼,都會在您發送許多<1kb的小文件(如帶有游戲文件夾的文件)時降低傳輸速度很多文件。

例如在局域網(以太網CAT5電纜)上,我發送一個文件,比如說一個視頻,傳輸速率在2MB到9MB之間
但是當我發送帶有大量文件的游戲文件夾時,傳輸速率約為300kb-800kb

我猜這是因為發送文件的方式:

  • 發送文件信息[file_path,file_Size]。
  • 發送文件字節[循環到文件末尾]。
  • 結束傳送[確保已完全收到]。

    但是,當您在網絡上的共享文件夾上使用常規Windows [copy-paste]時,發送文件夾的傳輸速率始終像發送單個文件一樣快。
    因此,我試圖使用[WCF服務c#4.0]開發一個文件傳輸應用程序,該應用程序將使用LAN上可用的最大速度,而我正在考慮這種方式:

     Get all files from the folder. if(FileSize<1 MB) { Create additional thread to send; SendFile(FilePath); } else { Wait for the large file to be sent. // fileSize>1MB } void SendFile(string path) // a regular single file send. { SendFileInfo; Open Socket and wait for server application to connect; SendFileBytes; Dispose; } 

    但是我對於使用多個套接字進行文件傳輸感到困惑,因為這將占用更多的端口和更多的時間(監聽和接受的延遲)。

    那是個好主意嗎?
    需要解釋一下是否有可能做,如何做,以及比tcp更好的協議。
    提前致謝。

  • 應該注意的是,您永遠不會實現100%的LAN速度使用-我希望您不希望這樣做-這里有太多因素。

    同樣,根據您的評論,您無法達到操作系統用於傳輸文件的級別,因為與Windows相比,您與裸機的距離要遠得多。 我相信Windows中的文件復制僅在驅動程序本身之上(甚至可能文件系統驅動程序中)一層或兩層-在WCF服務中,您需要走得更遠!

    您要做的最簡單的事情是將多個文件打包到存檔中,然后以這種方式傳輸它們,然后在接收端將整個包解壓縮到目標文件夾中。 當然,其中一些文件可能已經被壓縮,因此不會受益-但總的來說,您應該會看到很大的改進。 對於可以保留目錄結構的堅如磐石的壓縮方式,我會考慮使用SharpZipLib

    一個智能地使用壓縮的系統(可能是中等級別的CPU使用率較低,但可以在“可壓縮”文件上很好地工作)可能匹配或可能勝過OS復制。 Windows不使用此方法,因為它對於容錯沒有希望。 在操作系統中,文件中途停止傳輸將仍然保留所有成功文件。 如果傳輸本身被壓縮和中斷,則所有內容都會丟失,必須重新啟動。

    除此之外,您還可以考慮以下內容:

    在嘗試任何增強功能之前,默認情況下首先使用壓縮使其正常工作。 在某些情況下(取決於大小/文件數),您可以簡單地壓縮整個文件夾,然后一次性傳輸。 但是,超出一定大小可能會花費太長時間,因此您將需要創建一系列較小的拉鏈。

    接收壓縮文件時,將其寫入磁盤上的臨時位置,不要將整個文件緩沖在內存中。 將文件解壓縮到目標文件夾后,將其刪除。

    考慮增加將某些文件類型標記為可以“裸露”發送(即未壓縮)的功能。 這樣,您可以從壓縮過程中排除.zips,avis等文件。 就是說,具有一百萬個1kb zip文件的文件夾顯然可以從打包到一個存檔中受益-因此,也許您可​​以設置一個最小大小,超過該大小,該文件仍將打包到壓縮文件夾(或一個文件)中文件夾本身(包括子文件夾)的磁盤數量比率/大小。

    除此建議外,您還需要嘗試以獲得最佳結果。

    也許,一種簡單的解決方案是將所有文件收集到一個大數據流中(例如將它們壓縮,但只需附加即可使速度加快)並發送一個數據流。 這樣可以提高速度,但是會在兩台設備上消耗一些cpu,並且是一個好主意,如何分隔流中的所有文件。

    但是據我所知,使用更多端口只會是一個缺點,因為會有更多不同的流發生沖突,因此速度會下降。

    暫無
    暫無

    聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

     
    粵ICP備18138465號  © 2020-2024 STACKOOM.COM