我有一个奇怪的问题。我在 C# 程序(带有 process.start)中使用 pscp.exe 将文件上传到 SFTP 服务器。现在我已经使用相同的程序设置了一个新服务器,在那里我上传到与以前相同的 SFTP 服务器,但它在新服务器中运行速度非常慢。
奇怪的是,当我尝试通过 FileZilla 手动上传文件时,上传速度与预期一样快,但在使用该程序时却没有。
谁能解释一下?我是否遗漏了一些明显的东西,比如 Windows 设置或其他东西?
SSH 支持我们所说的流水线——发送多个 SSH 数据包而不等待每个数据包的响应。OpenSSH 支持此功能,而 Putty 不支持(至少直到最近才支持)。这就是你观察到的。另一个原因是算法的选择。如果协商 AES,它比旧应用程序默认使用的 DES 和 3DES 更快。
我最终重写了 SFTP 传输,改为使用 WinSCP 的 .Net 包装器。解决方案很快,文件传输也很快。这是文档的链接。
使用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"
Filezilla 可以使用多个并发连接并重用打开的连接。我相信 PSCP 是一个相对简单的应用程序。
像SFTP.NET这样的库可能会比运行子 pscp 进程产生更好的结果。
在发送文件时使用 ZipPackage 压缩文件也会有所帮助。