各位朋友都来说一下对Delphi2007怎么个看法。据官方称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...

解决方案 »

  1.   

    我觉得不好,编译器在查看类定义的时候都会崩溃。而且对于Win32的Delphi语言,自D7后基本没有什么新特性。期待下一个版本。
      

  2.   

    用d7,同时用fastMM的内存管理(仅限IDE)
      

  3.   

    学习高手经验了!但我还停留在D5,D7.一是机器不能运行D2007,二是不相信新产品的稳定性与兼容性;DELPHI都存在版本不兼容的问题,头都大。
      

  4.   

    早用D2007的,没什么兼容问题
    偶的N个工程都从D7迁移上D2007的,一切正常
      

  5.   

    同时装了D7和2007,不过大多还在用D7 ,2007只用来写一些小东东现在被迫用VC ing
      

  6.   

    D6+fastmm好像没什么问题。不过SetLength,Move操作string有些特殊情况我也遇到问题。
    pc上还装了3个版本的D7和一个D2007,不过项目中不能用。规定死的,不能乱用编辑器写项目。
      

  7.   

    我说的情况是我用了array[0..xx] of string
    move一直有av错误。不用数组就没事情。没明白。代码跟进去汇编的没看懂。
      

  8.   

    请大家关注一下:http://community.csdn.net/Expert/topic/5679/5679347.xml?temp=.3624689即将散分
      

  9.   

    死掉的情况,通常在于线程的异常退出,如果设置了FreeOnTerminate那么就有可能会在执行退出代码时挂起在那里,所以监测程序还是认识该线程存在,但是实际上在等一个释放信号,所以尽可能在线程处理代码中间使用try except屏蔽掉一些错误(如果有的话),就算是最小的问题也不可以马虎,任何一个有返回值的函数调用,就算出现异常的可能性只有万分之一甚至更小,也要对返回值进行处理。
      

  10.   


    Delphi7+FastMM一起用会好些,2007确实会挂起