C# SFTP SSH2下载速率(C)

C# SFTP SSH2下载速率(C),c#,ssh,console-application,sftp,chilkat,C#,Ssh,Console Application,Sftp,Chilkat,我正在开发一个C#控制台应用程序,它使用SSH密钥对身份验证从SFTP服务器下载文件 我正在使用Chilkat API 我试图下载的文件非常大,介于8GB到13GB之间 目前,使用我的应用程序可以获得的最大下载速度约为570 KB/s 如果我尝试使用FileZilla下载相同的文件,下载速度将达到2.6MB/s 从同一网络上的同一台计算机运行 是否有任何方法可以使FileZilla的下载速度与控制台应用程序相匹配?SFTP是安全的,这就是为什么它的下载速度较慢。如果您想要类似的速度,您应该使用F

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

我正在使用Chilkat API

我试图下载的文件非常大,介于8GB到13GB之间

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

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

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


是否有任何方法可以使FileZilla的下载速度与控制台应用程序相匹配?

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

您可能需要更大的TCP最大窗口大小:


控制它的.NET函数是

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

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


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

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


另外,您是否检查了替代SFTP组件(市场上有很多)

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

public int SoSndBuf{get;set;}

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

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


哦然后是Chilkat API。在那里的某个地方,它正在降低下载速度。下载时,您设置了一个预定义的字节数组(通常大小为4kb)来连续读写文件,FileZilla可能使用了更大的数组。欢迎使用。您可以通过编辑来更新自己的问题。你可以为问题投票(向上投票或向下投票),如果你得到的答案满足了你的需要并回答了你的问题,你可以将其标记为回答。这肯定与Chilkat API有关。我尝试了Rebex SFTP API,下载速度也一样。然后我看到Rebex有一个名为UseLargeBuffers的选项(它增加了缓冲区大小和TCP窗口大小),并且在启用下载后超过了2.8MB/s。不幸的是,我只有Chilkat的许可证,所以我给他们发了电子邮件,让他们知道如何增加缓冲区大小和TCP窗口大小。他们正在调查此事。