您现在的位置:首页 >> 基础算法 >> window基础 >> 内容

关于Delphi2007内存管理(FastMM)

时间:2011/9/3 15:37:27 点击:

  核心提示:据官方称Delphi2007完全抛弃了原来的BorlandMM,转而采用比较有名的第三方Delphi内存管理FastMM,相比之下很多之前已经尝到FastMM甜头的,自然是一大喜事,而对于那些尚无机会...
据官方称Delphi2007完全抛弃了原来的BorlandMM,转而采用比较有名的第三方Delphi内存管理FastMM,相比之下很多之前已经尝到FastMM甜头的,自然是一大喜事,而对于那些尚无机会尝试使用FastMM的自然也多少有点兴奋。

面对Delphi2007的炒作(多少算有点吧)以及本来的期待,自然就尝试着用它来做新的项目。虽然里面有很多不大满意的,但是多少相比之前的版本,还是有不少的进步。这段时间,想用来改造一个高并发的服务器程序。好不容易用起来了,结果一经测试,就有很多与之前版本不兼容的地方,其实就是内存管理。一开始测试就发现调用Delphi7的Library会出现内存异常,调试时异常发生在GetMem.inc,当中有一个IsMultiThread的判断,而IsMultiThread只有BeginThread会设置,由于Library本身没有多线程,而不会启动IsMultiThread,修改掉,基本上没有发现问题。接着就是压力测试,由于在Delphi当中大家用得最最爽最最多的就是String,与之相应的就是PChar,结果问题来了,把一个String复制到另一个String当中重复之后,就出异常,其中还包括SetLength,SetString,Move等,压力测试一段时间之后都会出现异常,而且异常的位置都是指向GetMem.inc,接着便是尝试着各种各样避开的办法,可以不采用String的地方全部采用HeapAlloc来分配。结果最多只能延长所能维护的时间,特别是   Move程序当中操作失败抛出异常,但是Ctrl+F7及时窗口当中执行又一切正常。

出现异常之后,慢慢地整个系统所有线程都被死锁,然后就挂起不干活。不仅我测试的如此,同事另外一个服务器程序也是如此,而且他都想再转回去使用BorlandMM...

作者:网络 来源:转载
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 盒子文章(www.2ccc.com) © 2024 版权所有 All Rights Reserved.
  • 沪ICP备05001939号