2010-08-15 56 views
1

我正在編寫使用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組件庫的任何建議或意見?

+0

你是否已經同時處理好幾個文件? – schoetbi 2010-08-15 21:58:36

+0

更新:我用這個http://www.enterprisedt.com/products/edtftpnet/documentation.html換出了ftp庫,我有完全相同的問題。我只在一個非異步線程中一次上載/下載一個文件。 – brandon 2010-08-15 22:21:25

+0

更新:我甚至嘗試使用FtpWebRequest手動上傳類似於這裏的示例:http://blogs.techrepublic.com.com/howdoi/?p=165。我有同樣的結果。無論我使用的緩衝區大小如何,這都是影響傳輸的非常低的級別。非常沮喪,非常靜靜。 – brandon 2010-08-15 23:41:28

回答

2

知道使用FileZilla的連接是主動模式連接還是被動模式連接可能很有趣。其他感興趣的事情是嘗試使用顯示客戶端和服務器之間的對話的FTP客戶端來下載文件。我不確定FileZilla是否會向您顯示這些信息。