【问题标题】:Execution Speed of 64-bit Delphi exe versus 32-bit Delphi exe64 位 Delphi exe 与 32 位 Delphi exe 的执行速度
【发布时间】:2023-03-22 11:10:02
【问题描述】:

在过去的几年里,我一直在使用最新版本的 Delphi 10.3 为我的用户创建 32 位可执行文件和 64 位可执行文件。我注意到 64 位版本的运行速度始终比 32 位版本慢 10% 到 25%。

我的程序是一个独立的基于 VCL 的可执行文件,不使用任何外部 DLL。我的发布配置编译器选项对于 32 位和 64 位是相同的。两者都有 Optimization = true。

我原以为事情就是这样。但是今天,我将一个 32 位版本的 C++ 程序与 64 位的相同程序进行比较,我发现 64 位程序比 32 位版本快 5% 到 10%。

除此之外,我还发现了这篇文章:Integer Performance Comparison for C++, C#, Delphi,其中包含一个表格和图表,肯定显示 Delphi Win64 比 Delphi Win32 快:

所以我的问题是:

  1. 对于 64 位版本,是否有任何需要更改的 Delphi 编译器设置?

  2. 以下哪种类型的处理在 64 位 Delphi 中比 32 位慢?

    • 内存密集型处理?
    • 大量数值计算?
    • 大量的字符串操作?
    • 大量磁盘读/写?
    • 大量数据库访问?

【问题讨论】:

  • 您是否尝试过使用 Delphi 的替代品进行性能比较,例如 Free Pascal 或 RemObjects Oxygene?可能是 Delphi 没有像其他一些供应商的编译器那样优化。
  • @KenWhite 这根本不是真的。大多数 x86-64 applications run ~15% faster on average 由于更大的寄存器空间和 SSE 的使用。与 ARM64 相同。那里有无数的基准测试,只有当应用程序使用太多指针时,64 位版本才会更慢。它不像 MIPS 或 SPARC 这样的经典 RISC 架构,唯一的优势是更大的内存地址空间
  • 请显示minimal reproducible example。否则你只需要分析你的程序并找出它慢的地方
  • “众所周知,Delphi 拥有出色的优化编译器。”如果那是真的。可悲的是它不是。实际上,Delphi 的编译器以生成效率低下的代码而闻名。
  • @lkessler 你的问题的答案基本上取决于你的程序做什么。因此,您的问题对于本网站来说过于宽泛。

标签: c++ performance delphi 64-bit


【解决方案1】:

这是在 IDE 下吗?我注意到在 IDE 下运行 64 位和 32 位的速度明显变慢,运行一个简单的进程大约需要 5-10 秒。但是,当我在 IDE 之外运行时,情况并非如此。所以我倾向于在 32bit 中调试。

在 IDE 之外的 64 位版本中运行相同的简单进程似乎可能比 32 位版本稍快。

进行了后续编辑,以阐明我的流程是什么:

我的过程是将 XML 文件加载到客户端数据集中,然后通过在 Debug 中编译的 32 或 64 版本读取/写入 Firebird 本地 64 位服务器。同样使用 CData 的 AWS DynamoDB 访问在 IDE 下编译 64 位与 32 位相比要慢得多,但是 64 位应用程序中的 AWS 访问比 IDE 之外的 32 位更快。去图吧。

【讨论】:

  • 这是一个有趣的想法。我对此进行了测试,它是否在 IDE 中似乎并不重要,而是它是使用 Debug 还是 Release 构建的。我使用 Debug 构建的一项测试 32 位需要 3.10 秒,64 位需要 3.57 秒。 Release 中的相同测试需要 32 位 3.45 秒和 64 位 3.49 秒。
  • 即便如此,我的 64 位发布时间仍然没有比我的 32 位发布时间快,而且应该明显更快。为什么 Debug 32-bit 比所有其他的都快,我也很奇怪。 (注意:我做了几次运行并取平均值。一种配置的时间变化不超过 0.1 秒)
猜你喜欢
  • 2016-01-29
  • 2013-06-26
  • 2011-11-22
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
  • 2019-04-16
  • 2014-12-16
  • 1970-01-01
相关资源
最近更新 更多