2011-07-08 75 views
1

我正在開發一個C#控制檯應用程序,它使用SSH密鑰對認證從SFTP服務器下載文件。SFTP SSH2下載速率(C#)

我正在使用Chilkat API。

我試圖下載的文件非常大,介於8GB-13GB之間。

目前我可以用我的應用程序的最大下載速度大約爲570 KB/s的

如果我嘗試使用FileZilla中,我得到的下載2.6 MB的速度來下載同一個文件/秒

從運行同一臺網絡上的同一臺計算機。

無論如何要匹配FileZilla的下載速度與控制檯應用程序?

+0

歡迎來到SO。您可以通過編輯來更新自己的問題。您可以投票回答問題(upvote或downvote),如果您的答案滿足您的需求並回答您的問題,則可以將其標記爲答案 –

回答

-1

影響SFTP速度的因素有幾個。 SSH緩衝區大小,SFTP緩衝區大小,流水線長度等因素(加密算法是另一個因素)。另一個因素是語言。優化的C++代碼總是比C#代碼更快。所以雖然你可以用FileZilla實現可比較的速度,但你不太可能匹配它們。

你還檢查了其他SFTP組件(市場上有很多)嗎?

+0

這絕對是Chilkat API的一些東西。我嘗試了Rebex SFTP API,下載速度相同。然後我看到Rebex有一個名爲UseLargeBuffers的選項(它增加了緩衝區大小和TCP窗口大小),並且在啓用下載之後超過了2.8MB/s。不幸的是,我只有Chilkat的許可證,所以我通過電子郵件發送給他們,讓他們知道增加緩衝區大小和TCP窗口大小。他們正在研究它。 –

-1

SFTP是安全的,這就是爲什麼它的下載速度較慢。如果你想要類似的速度,你應該使用FTP下載或嘗試修改服務器設置以允許非限制速度。

+2

FileZilla也使用SFTP連接。同一個私鑰。相同的端口... –

+0

哦...那就是奇爾卡特API。它在某處會降低下載速度。下載時,您需要設置預定義的字節數組(通常大小爲4kb)以連續讀取和寫入文件,FileZilla可能會使用更大的數組。 –

0

我不得不當我設置byffer尺寸過小前這個問題。

對於實際的結果,緩衝區大小應根據文件大小而有所不同。你不需要小文件緩衝區(你的情況,你的應用程序管理緩衝區的瓶頸,而不是連接速度)。

你也不希望較大的緩衝區容量較小的文件,所以你不會按照進度。

1

我知道這是超舊的,但沒有人明確地回答它。奇爾卡特建議增加SoRcvBuf和SoSndBuf的大小,如果你有網絡性能。我遇到了和你一樣的問題,這解決了我的問題。

ChilKat documentation:

公衆詮釋SoSndBuf {獲得;組; }

設置發送緩衝區大小套接字選項。通常,這個屬性應該保持不變。默認值爲0,表示不應顯式設置發送緩衝區大小套接字選項(即應使用系統默認值,這可能因系統而異)。

如果上傳性能看起來很慢,則可以更改此屬性。建議爲4096的倍數。要查看當前系統的默認發送緩衝區大小,請在調用任何建立連接的方法後檢查LastErrorText屬性。應在「SO_SNDBUF」標題下報告。爲提高性能,請嘗試將其設置爲默認值的2倍,3倍或4倍。