我有一个奇怪的问题。我正在使用C#程序(带有process.start)中的pscp.exe将文件上传到SFTP服务器。现在我已经设置了一个具有相同程序的新服务器,我在那里上传到与以前相同的SFTP服务器,但它在新服务器中的运行速度非常慢。
奇怪的是,当我尝试通过FileZilla手动上传文件时,上传速度与预期一样快,但在使用程序时却没有。
任何人都能解释一下吗?我错过了像窗户设置或其他什么东西吗?
答案 0 :(得分:4)
SSH支持我们所说的流水线技术 - 发送多个SSH数据包而不等待对每个数据包的响应。 OpenSSH支持这种功能,而Putty则不支持(至少直到最近)。这就是你观察到的。另一个原因是算法的选择。如果协商AES,则比旧版应用程序默认使用的DES和3DES更快。
答案 1 :(得分:2)
Filezilla可以使用多个并发连接并重用开放连接。我相信PSCP是一个相对简单的应用程序。
像SFTP.NET这样的库可能会比运行子pscp进程产生更好的结果。
使用ZipPackage在发送文件时压缩文件也很有帮助。
答案 2 :(得分:2)
我最终重写了SFTP传输,以便使用.Net包装器代替WinSCP。解决方案很快,文件传输也是如此。这是文档的link。
答案 3 :(得分:2)
使用WinSCP上传文件的速度要快10倍。
要从命令行执行此操作,首先必须将winscp.com
文件添加到%PATH%。它不是顶级域,而是可执行文件.com
,位于WinSCP安装目录中。
然后只需发出一个简单的命令,您的文件上传速度就会快得多:
WinSCP.com /command "open sftp://username:password@example.com:22" "put your_large_file.zip /var/www/somedirectory/" "exit"
并确保检查同步文件夹功能,这基本上是rsync
的功能,因此您不会再想要使用pscp.exe。
WinSCP.com /command "help synchronize"