Delphi 2006 中一个重要的更新就是使用开源内存管理器 FastMM 替调了使用了 N 年的老内存管理器。
FastMM 在外国 Delphi 社区非常有名,其主要目的就是重新实现一个高效、安全、稳定的内存管理器(Borland 的内存管理器问题多多,如 Dll 和 Exe 间无法共享,多线程下效率底--一些情况下甚至于低一个数量级!),在代号为 Dexter 的 Delphi 2006 没 release 之前已经听李维大肆鼓吹说 Dexter 如何出色,还在 CSDN 上说他 Demo 证明 FastMM 在 Delphi 和 BCB 下能提高 NNN% 的效率!
FastMM 的主页:
http://fastmm.sourceforge.net
相对旧内存管理器,FastMM 有诸多的优点:
1、彻底实现了 Borland 的内存管理器,可以完全取代现有的内存管理器(“取代”就是第一个 uses FastMM4,that is all ...)
2、实现了内存管理器共享机制,Exe 和 Dll 间共享内存管理器不需要任何 Dll 支持
3、集成了内存泄漏检测功能
4、充分兼容现有的代码、Delphi 旧内存管理器模式
5、为了加速 Delphi IDE(如 Delphi 5/6/7、Delphi 2005)的启动速度、管理内存占用等,他提供了 BorlndMM.dll 的替代(在FastMM478\Replacement BorlndMM DLL\Precompiled\for Delphi IDE\Performance\下面),直接替换 Delphi/Bin 中的 Dll 即可!
如果想在 Delphi 7 下使用,最最简单的方法当然是在 dpr 中第一个 uses FastMM4
打开FastMM4的调试功能,首先在自己的project里把FastMM4放在最前面,例如:
FastMM4,
Main in ‘Main.pas’ {MainForm},
再修改FastMM4Options.inc,打开全调试模式。例:
{$define FullDebugMode}
也可以在project中定义编译常量:FullDebugMode。同时把FastMM_FullDebugMode.dll拷贝到编译后生成的可执行程序所在目录。
再要打开内存泄漏报告:EnableMemoryLeakReporting。一般情况下是缺省打开的。
这样就打开了全调试模式,如果发生内存泄漏将会生成报告文件,如果在IDE运行的时候还会弹出一个对话框显示。报告文件类似:kicoy_MemoryManager_EventLog.txt
最佳实践: 在FastMM4Options.inc文件中,把默认的{$define EnableMemoryLeakReporting},改成{.$define EnableMemoryLeakReporting},去掉默认的内存泄露报告功能;把默认的{.$define FullDebugMode},改成{$define FullDebugMode}打开全调试功能。这样,以后在项目中,project->options->conditional defines中,如果加入{$define EnableMemoryLeakReporting},则打开内存泄露报告功能(而且是FullDebugMode,屏幕提示+记录到文件);去掉{$define EnableMemoryLeakReporting},则关闭内存泄露的报告功能。注意,改变编译条件之后,要重新Build一下工程,才会生效.
请注意,打开的FastMM4的这些调试功能,只有在IDE环境下才会生效,在应用程序单独运行的情况下,是感觉不到FastMM4的存在的,不会提示内存泄露,也不会记录文件。
The Fastcode project provides highly optimized functions for the Delphi community. Functions are faster versions of Delphi runtime library functions, VCL functions or functions meant as extensions for these. The project is running on a volunteer basis.
FastCode 是通过直接 Patch 掉 Delphi 的函数实现的,如你使用 Delphi RTL 中的 Pos 函数,引用 FastCode 相应的单元后在单元的初始节他会根据不同的 CPU 类型把 Delhpi 的函数替换成最优的函数进行调用
To use it must include the "Fastcode" unit in the first order
of your uses clauses of your delphi project. If you're using
and alternative memory manager and/or FastMove the order should
be like:
FastMM4,
FastCode,
FastMove,
... etc ...