C++ 64位Delphi exe与32位Delphi exe的执行速度
在过去几年中,我一直在使用Delphi的最新版本10.3为我的用户创建32位可执行文件和64位可执行文件。我注意到64位版本的运行速度始终比32位版本慢10%到25% 我的程序是一个独立的基于VCL的可执行文件,不使用任何外部DLL。我的版本配置编译器选项对于32位和64位是相同的。两者都有优化=真 我原以为事情就是这样的。但今天,我把一个32位版本的C++程序与64位的同一程序进行比较,发现64位程序比32位版本快5%到10%。 除此之外,我还发现了这篇文章:其中包括一个表和图表,明确显示Delphi Win64比Delphi Win32快: 因此,我的问题是:C++ 64位Delphi exe与32位Delphi exe的执行速度,c++,performance,delphi,64-bit,C++,Performance,Delphi,64 Bit,在过去几年中,我一直在使用Delphi的最新版本10.3为我的用户创建32位可执行文件和64位可执行文件。我注意到64位版本的运行速度始终比32位版本慢10%到25% 我的程序是一个独立的基于VCL的可执行文件,不使用任何外部DLL。我的版本配置编译器选项对于32位和64位是相同的。两者都有优化=真 我原以为事情就是这样的。但今天,我把一个32位版本的C++程序与64位的同一程序进行比较,发现64位程序比32位版本快5%到10%。 除此之外,我还发现了这篇文章:其中包括一个表和图表,明确显示De
- 内存密集型处理
- 广泛的数值计算
- 大量的字符串操作
- 大量磁盘读/写
- 大量的数据库访问
这是在IDE下吗?我注意到在IDE下运行64位与32位的速度明显减慢,运行一个简单的进程大约需要5-10秒。然而,当我在IDE之外运行时,情况并非如此。所以我倾向于用32位进行调试 在64位IDE之外运行同样的简单进程似乎比32位版本快一些 作为后续编辑,以澄清我的流程:
我的过程是将XML文件加载到clientdataset中,然后通过调试中编译的32或64版本读取/写入Firebird本地64位服务器。此外,使用CData的AWS DynamoDB访问在IDE下以64位编译要比32位编译慢得多,但是64位应用程序中的AWS访问要比IDE外的32位快得多。仔细想想。您是否尝试过使用Delphi的替代方案进行性能比较,例如或重新对象?可能是Delphi没有像其他供应商的编译器那样优化。@KenWhite,这根本不是真的。大多数是由于较大的寄存器空间和SSE的使用。与ARM64相同。有无数的基准测试,只有当应用程序使用太多的指针时,64位版本才会变慢。它不像经典的RISC体系结构,如MIPS或SPARC,其唯一的优势是更大的内存地址空间请显示一个。否则,您只需分析您的程序并找出它的速度慢的地方“Delphi有一个优秀的优化编译器”,如果这是真的话。遗憾的是,事实并非如此。Delphi的编译器实际上以产生效率相当低的代码而闻名。@lkessler您的问题的答案基本上取决于您的程序的功能。因此,你的问题对于这个网站来说太广泛了。这是一个有趣的想法。我对此进行了测试,结果似乎并不取决于它是否在IDE中,而是取决于它是使用Debug还是Release构建的。我使用Build with Debug的一个测试对于32位需要3.10秒,对于64位需要3.57秒。在版本中的相同测试32位需要3.45秒,64位需要3.49秒。即使如此,我的64位释放时间仍然不比我的32位释放时间快,而且应该明显快。为什么调试32位的速度比其他的都快,我也很奇怪。(注意:我做了几次运行并取平均值。一次配置的时间变化不超过0.1秒)