我正在編寫使用ftp與遠程服務器上傳和下載多個文件的軟件。下載速度很好,並保持一致性,高於4mb/s。小型上傳是即時的。我遇到的問題是,當我的程序上傳一個大型40Mb zip文件時,我的性能表現非常差。它似乎以脈衝串(100-200Kb/s)上傳,然後延遲一秒鐘,並重復執行此操作,直到文件最終完成上傳。從同一服務器以編程方式下載文件需要30秒鐘,使用filezilla將相同的文件上傳到同一臺服務器需要大約相同的時間。通過軟件上傳最多可能需要15分鐘。有些東西顯然是錯誤的。需要在C#中提高ftp上傳性能的建議
我使用starksoft FTP庫從這裏處理的上傳/下載:http://starksoftftps.codeplex.com/
這裏是有問題的代碼示例:
FtpClient ftp = new FtpClient(sourcecfg.Host);
ftp.MaxUploadSpeed = 0;
ftp.MaxDownloadSpeed = 0;
ftp.FileTransferType = TransferType.Binary;
ftp.DataTransferMode = TransferMode.Passive;
ftp.Open(sourcecfg.FtpUserName, sourcecfg.FtpPassword);
ftp.PutFile(backupTempPath, targetcfg.getFullPath() + "wordpress-backup.zip", FileAction.Create);
我使用一個重載版本也試過PutFile接收Stream對象而不是路徑字符串。結果沒有變化。
附帶事項:我正在使用visual c#express 2008在winxp中編譯virtualbox實例。我已經嘗試了調試和生產EXE的結果沒有改變。
這個問題感覺像是緩衝或節流問題,但在查看ftp類的內部代碼時,我沒有看到任何不尋常的東西,我特意將其設置爲不節制。關於這個特定的ftp組件庫的任何建議或意見?
你是否已經同時處理好幾個文件? – schoetbi 2010-08-15 21:58:36
更新:我用這個http://www.enterprisedt.com/products/edtftpnet/documentation.html換出了ftp庫,我有完全相同的問題。我只在一個非異步線程中一次上載/下載一個文件。 – brandon 2010-08-15 22:21:25
更新:我甚至嘗試使用FtpWebRequest手動上傳類似於這裏的示例:http://blogs.techrepublic.com.com/howdoi/?p=165。我有同樣的結果。無論我使用的緩衝區大小如何,這都是影響傳輸的非常低的級別。非常沮喪,非常靜靜。 – brandon 2010-08-15 23:41:28