真的有使Delphi编译后的榀执行程序速度提高几倍的方法吗? ( 积分: 0 )

  • 主题发起人 主题发起人 31415926
  • 开始时间 开始时间
3

31415926

Unregistered / Unconfirmed
GUEST, unregistred user!
请看下文工:

字符串与动态数组的线程安全 (thread safety)

在 delphi 5 以前动态数组与长字符串的操作这些非线程安全调用是由引用计数来处理其临界问题的 ,而自 delphi5 起就改为直接在一些临界指令前加 lock 指令前缀来避免这个问题。不幸的是这一修改的代价相当昂贵 ,因为在 pentium ⅱ处理器中 lock 指令相当费时 ,大概要耗费额外的 28 个指令周期来完成这一操作 ,因而整体效率至少下降一半。

解决这个问题的办法只有一个 ,那就是修改 delphi rtl 核心代码。在备份原文件后 ,将 source/rtl/sys/system.pas 中所有的 lock 替换为 {lock},当然必须是整字替换。

如此还未完全优化 ,下一步是将 delphi4 运行库中也有的 xchg 指令去掉 ,因为该指令有隐含的 lock 前缀 ,所以必须将 system.pas 内 _lstrasg 和 _strlasg 两个过程中的 xchg edx,[eax] 替换为如下代码 :

mov ecx,[eax]
mov [eax],edx
mov edx,ecx

ok 大功告成 ,编译一下 ,覆盖 system.dcu 即可。如此其执行效率将比 delphi5 提高 6 倍 ,比 delphi4 提高 2 倍。
 
毫无疑问,显然是历久弥新的高人!
 
真的。。。吗?怎么测试?去掉LOCK程序会有什么潜在问题?

D6可以用吗?D6的system.pas单元没有_strlasg过程。
 
你这篇文章来自很早的Delphi优化的字符串篇.
这个是指字符串的执行效率提升.而且牺牲了多线程的安全性为代价的.
只适合在某些大量使用了字符串操作,并且保证是单线程的应用程序.
不提倡这样修改DelphiRTL库.而且官方也不倡导自己编译System.pas单元.
DCC32编译System.PAS要使用未公开的参数-y
 
多谢楼上,可是我的软件就是单线程的,而且有大量的字付串操作,
就是改了后编译不了。我试试你的参数

system.pas单元是有_strlasg过程
的,我改过。
 
按-y编译了一个SYSYEM,感觉速度一样
 
后退
顶部