SFTP SSH2下载速率(c#)



我正在开发一个c#控制台应用程序,它通过SSH密钥对认证从SFTP服务器下载文件。

我使用的是Chilkat API。

我尝试下载的文件非常大,在8GB-13GB之间。

目前我可以使用我的应用程序获得的最大下载速度约为570 KB/s

如果我尝试使用FileZilla下载相同的文件,我得到的下载速度为2.6 MB/s

在同一网络上的同一台计算机上运行。

是否有办法匹配FileZilla与控制台应用程序的下载速度?

您可能需要更大的TCP最大窗口大小:http://msdn.microsoft.com/en-us/library/ms819736.aspx

控制它的。net函数是Socket.SetSocketOption(SocketOptionName.ReceiveBuffer)

我知道这是一个非常古老的问题,但是还没有人明确地回答这个问题。Chilkat建议增加SoRcvBuf和SoSndBuf的大小,如果你有网络性能。我和你有同样的问题,这个解决了我的问题。

来自ChilKat文档:

public int SoSndBuf {get;设置;}

设置发送缓冲区大小socket选项。通常,这个属性应该保持不变。默认值为0,表示不应该显式设置发送缓冲区大小socket选项(即应该使用系统默认值,该值可能因系统而异)。

如果上传性能看起来很慢,可以更改此属性。建议设置为4096的倍数。要查看当前系统的默认发送缓冲区大小,请在调用任何建立连接的方法后检查LastErrorText属性。应该在标题"so_sndbuf"下进行报告。要提高性能,请尝试将其设置为默认值的2、3或4倍。

当我将字节大小设置得太小时,我以前遇到过这个问题。

为了获得真实的结果,缓冲区大小应该根据文件大小而变化。你不想为大文件使用小缓冲区(在你的情况下,瓶颈是你的应用程序管理缓冲区,而不是连接速度)。

您也不希望为较小的文件提供大缓冲区,这样您就不会跟踪进度。

影响SFTP速度的因素有几个。SSH缓冲区大小、SFTP缓冲区大小、管道长度都在这些因素之中(加密算法是另一个因素)。还有一个因素是语言。优化的c++代码总是比c#代码快。因此,虽然你可以用FileZilla达到相当的速度,但你不太可能与它们匹敌。

你是否也检查了其他的SFTP组件(市场上有很多)?

SFTP是安全的,这就是为什么它下载速度较慢。如果您想要类似的速度,您应该使用FTP下载,或者尝试修改服务器设置以允许非限制速度。

最新更新