1

我正在开发一个 C# 控制台应用程序,它使用 SSH 密钥对身份验证从 SFTP 服务器下载文件。

我正在使用 Chilkat API。

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

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

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

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

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

4

5 回答 5

1

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

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

于 2011-07-09T00:04:27.167 回答
1

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

来自ChilKat 文档:

公共 int SoSndBuf {get; 放; }

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

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

于 2013-08-29T17:56:14.163 回答
0

之前当我将 byffer 大小设置得太小时,我遇到了这个问题。

对于实际结果,缓冲区大小应根据文件大小而有所不同。您不想要大文件的小缓冲区(您的情况,瓶颈是您的应用程序管理缓冲区,而不是连接速度)。

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

于 2011-07-09T02:00:37.143 回答
-1

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

于 2011-07-08T23:22:18.030 回答
-1

有几个因素会影响 SFTP 速度。SSH 缓冲区大小、SFTP 缓冲区大小、管道长度是这些因素之一(加密算法是另一个)。另一个因素是语言。优化的 C++ 代码总是比 C# 代码快。因此,虽然您可以使用 FileZilla 实现相当的速度,但您不太可能匹配它们。

您是否还检查了其他 SFTP 组件(市场上有很多)?

于 2011-07-09T05:18:32.157 回答