如何使用Delphi 2010优化上传例程?

The*_*ude 7 delphi performance upload indy resume-upload

尚未发布的 Delphi 2010应用程序允许用户将他们的文件上传到我的服务器.现在我正在使用HTTPS POST发送文件,(简化)算法基本上是:

  1. 将文件拆分为"切片"(每个256KB)
  2. 对于每个切片,将其POST到服务器

即.对于1MB文件:

--> Get Slice #1 (256KB)
--> Upload Slice #1 using TidHTTP.Post()

--> Get Slice #2 (256KB)
--> Upload Slice #2 using TidHTTP.Post()

--> Get Slice #3 (256KB)
--> Upload Slice #3 using TidHTTP.Post()

--> Get Slice #4 (256KB)
--> Upload Slice #4 using TidHTTP.Post()
Run Code Online (Sandbox Code Playgroud)

我正在使用Indy 10.我(ab)一遍又一遍地使用我的探查器,除了更改上传例程本身之外,没有太多要优化.

我还使用多线程,尽管我尽了最大努力来优化我的代码,我的基准仍然告诉我,我可以做的更好(也有其他很好的优化软件,做实现了很多更好的时机......几乎两倍快速上传例程!)

我知道这不是我的服务器的错...这是我仍然需要探索的想法:

  1. 我尝试在单个POST中对切片进行分组,这自然会导致性能提升(20-35%),但现在可以降低恢复能力.

  2. 我也考虑过使用SFTP/SSH,但我不确定它是否很快.

  3. 使用Web套接字实现可恢复上传(如此组件),我也不确定速度.

现在我的问题是:我有什么办法可以加快上传速度吗?我愿意接受我可以实施的任何建议,包括命令行工具(如果许可证允许我将其与我的应用程序一起发货),前提是:

  1. 支持可恢复上传
  2. 快速!
  3. 合理的内存使用情况
  4. 安全并允许登录/用户身份验证

此外,由于主要的安全问题,FTP不是我想要实现的东西.

非常感谢!

Rem*_*eau 5

我建议TIdHTTP.Post()为整个文件做一个单独的操作,而不是根据它进行整理.您可以使用TIdHTTP.OnWork...事件来跟踪发送到服务器的字节数,以便您知道在需要时从何处继续.恢复时,您可以使用该TIdHTTP.Request.CustomHeaders属性包含一个自定义标头,告诉服务器您要从哪里恢复,因此它可以在接受新数据之前将其先前的文件回滚到指定的偏移量.