我正在开发一个C#控制台应用程序,它使用SSH密钥对身份验证从SFTP服务器下载文件。
我正在使用Chilkat API。
我试图下载的文件非常大,介于8GB-13GB之间。
目前我使用我的应用程序获得的最大下载速度约为570 KB / s
如果我尝试使用FileZilla下载相同的文件,我的下载速度为2.6 MB / s
从同一网络上的同一台计算机运行。
有没有将FileZilla的下载速度与控制台应用程序相匹配?
答案 0 :(得分:1)
您可能需要更大的TCP最大窗口大小:http://msdn.microsoft.com/en-us/library/ms819736.aspx
用于控制它的.NET函数是Socket.SetSocketOption(SocketOptionName.ReceiveBuffer)
答案 1 :(得分:1)
我知道这是超级老,但还没有人明确回答。如果您具有网络性能,Chilkat建议增加SoRcvBuf和SoSndBuf大小。我遇到了与你完全相同的问题,这解决了我的问题。
public int SoSndBuf {get;组; }
设置发送缓冲区大小套接字选项。通常,此属性应保持不变。默认值为0,表示不应显式设置发送缓冲区大小套接字选项(即系统默认值,可能因系统而异)。
如果上传性能似乎很慢,则可以更改此属性。建议为4096的倍数。要查看当前系统的默认发送缓冲区大小,请在调用建立连接的任何方法后检查LastErrorText属性。应在“SO_SNDBUF”标题下报告。要提高性能,请尝试将其设置为默认值的2,3或4倍。
答案 2 :(得分:0)
我之前遇到这个问题的时候,我将byffer尺寸设置得太小了。
为了获得真实的结果,缓冲区大小应根据文件大小而有所不同。你不希望小文件夹用于大文件(你的情况,瓶颈是管理缓冲区的应用程序,而不是连接速度)。
您也不希望大缓冲区用于较小的文件,因此您不会跟踪进度。
答案 3 :(得分:-1)
SFTP是安全的,这就是为什么它以较慢的速度下载。如果您想要类似的速度,您应该使用FTP下载或尝试修改服务器设置以允许非限制速度。
答案 4 :(得分:-1)
有几个因素会影响SFTP的速度。 SSH缓冲区大小,SFTP缓冲区大小,管道长度都属于这些因素(加密算法是另一个因素)。还有一个因素是语言。优化的C ++代码总是比C#代码更快。因此,虽然您可以使用FileZilla获得可比较的速度,但您不太可能匹配它们。
您是否也检查过替代SFTP组件(市场上有很多组件)?