gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:53:48 25 4
gpt4 key购买 nike

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

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

即。对于 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()

我正在使用Indy 10。我一遍又一遍地使用我的分析器,除了更改上传例程本身之外,没有太多需要优化的地方。

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

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

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

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

  3. 使用网络套接字实现断点续传(如 this component ),我也不确定速度。

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

  1. 支持断点续传
  2. 快!
  3. 合理的内存使用
  4. 保护并允许登录/用户身份验证

此外,出于重大安全考虑,我不想实现 FTP。

非常感谢!

最佳答案

我建议对整个文件执行一次TIdHTTP.Post(),而不对其进行分块。您可以使用 TIdHTTP.OnWork... 事件来跟踪发送到服务器的字节数,以便您知道在需要时从哪里恢复。恢复时,您可以使用 TIdHTTP.Request.CustomHeaders 属性包含一个自定义 header ,告诉服务器您从哪里恢复,以便服务器可以在接受之前将其先前的文件回滚到指定的偏移量。新数据。

关于performance - 如何使用Delphi 2010优化上传例程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9476744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com