我正在开发一个C#控制台应用程序,它下载文件从服务器与SSH密钥对身份验证。
我正在使用Chilkat API。
我尝试下载的文件非常大,在8 8GB到13 8GB之间。
目前,我可以使用我的应用程序获得的最大下载速度约为570 KB/s
如果我尝试使用FileZilla下载相同的文件,则下载速度为2.6MB/s
从同一网络上的同一台计算机运行。
有没有什么方法可以与控制台应用程序的FileZilla下载速度相匹敌?
发布于 2011-07-09 13:18:32
有几个因素会影响SFTP速度。SSH缓冲区大小、SFTP缓冲区大小、管道长度都在这些因素中(加密算法是另一个因素)。另一个因素是语言。优化的C++代码将始终比C#代码更快。因此,虽然您可以使用FileZilla实现类似的速度,但您不太可能与之匹敌。
另外,你有没有检查替代的SFTP组件(市场上有很多)?
发布于 2011-07-09 08:04:27
您可能需要更大的TCP最大窗口大小:http://msdn.microsoft.com/en-us/library/ms819736.aspx
控制它的.NET函数是Socket.SetSocketOption(SocketOptionName.ReceiveBuffer)
发布于 2013-08-30 01:56:14
我知道这很古老,但还没有人明确地回答这个问题。如果您有网络性能,Chilkat建议增加SoRcvBuf和SoSndBuf大小。我遇到了和你完全一样的问题,这解决了我的问题。
来自ChilKat documentation:
public int SoSndBuf {get;set;}
设置发送缓冲区大小套接字选项。通常,此属性应保持不变。默认值为0,表示不应显式设置发送缓冲区大小套接字选项(即应使用系统默认值,该值可能因系统而异)。
如果上载性能看起来很慢,可以更改此属性。建议为4096的倍数。若要查看当前系统的默认发送缓冲区大小,请在调用任何建立连接的方法后检查LastErrorText属性。它应该在"SO_SNDBUF“的标题下报告。要提高性能,请尝试将其设置为默认值的2、3或4倍。
https://stackoverflow.com/questions/6631522
复制相似问题