我现在有个项目,功能非常多,我现在想重构,大家帮忙分析下性能。我现在的想法是把每个功能模块化,也就是一个功能搞成一个单元(以前是基本所有功能都在一个单元里,而且都是全局函数或变量)。
比如说原功能:
type
var
 b: Integer;
 {省略N多变量声明}procedure a();
{省略N多过程声明}
implementation
现在我想新搞一个单元Txx = class
public
   b: Integer;
   procedure a();
end;
(这种类那么就是一个功能一个类,在总工程创建主窗体里每个类都要create一次,性能如何?)Txx = record
   b: Integer;
   procedure a();
end;
(这种我测试结构体里也可以有过程,他不需要创建只需要声明即可,性能如何?)还有就是新搞一个单元
type
var
 b: Integer;procedure a();
implementation在其他单元调用的时候 搞成 单元名.a 这种方法使用(这种应该属于静态的,意义是  单元名是功能, 功能.过程)以上三种那种效率好呢?  第一个类,我怕很多很多类都create那么效率就不行吧,不过现在有个类方法,类方法不需创建,不了解他的性能如何?大家帮忙解密疑团,在此谢过

解决方案 »

  1.   

    建议使用类进行封装,代码可读性、可维护性比性能重要的多,当然,你如果要追求性能,那么抛弃一切OOP的思想,使用面向过程的编程方法,再加上部分函数使用汇编实现,这样性能提升会比较明显。
      

  2.   


    汇编我是不懂了,我也只是想把每个功能模块封装下,除了我上面3种封装方式,还有其他方法吗? 以上3种方法建议使用类吗?    很多类一起create好像很慢
      

  3.   


    汇编我是不懂了,我也只是想把每个功能模块封装下,除了我上面3种封装方式,还有其他方法吗? 以上3种方法建议使用类吗?    很多类一起create好像很慢
    你要了解Create到底干了些什么,就知道到底慢不慢了,不要想当然“创建”就是繁琐的,除了一些自定义的初始化,Create其实只是为类结构申请了内存,就像你结构体+方法一样,类的构造,等于申明了一个结构体指针并为该指针分配内存空间。
      

  4.   


    汇编我是不懂了,我也只是想把每个功能模块封装下,除了我上面3种封装方式,还有其他方法吗? 以上3种方法建议使用类吗?    很多类一起create好像很慢
    你要了解Create到底干了些什么,就知道到底慢不慢了,不要想当然“创建”就是繁琐的,除了一些自定义的初始化,Create其实只是为类结构申请了内存,就像你结构体+方法一样,类的构造,等于申明了一个结构体指针并为该指针分配内存空间。申请空间这个我到是知道的,如我原来的代码全部都是全局变量 全局函数,我把每个功能改成每个类调用差距大吗? 不好意识,我不知道如何测试他俩的性能,类应该占用内存多一些,最少类要保存有个指针地址在内存中
      

  5.   


    汇编我是不懂了,我也只是想把每个功能模块封装下,除了我上面3种封装方式,还有其他方法吗? 以上3种方法建议使用类吗?    很多类一起create好像很慢
    你要了解Create到底干了些什么,就知道到底慢不慢了,不要想当然“创建”就是繁琐的,除了一些自定义的初始化,Create其实只是为类结构申请了内存,就像你结构体+方法一样,类的构造,等于申明了一个结构体指针并为该指针分配内存空间。申请空间这个我到是知道的,如我原来的代码全部都是全局变量 全局函数,我把每个功能改成每个类调用差距大吗? 不好意识,我不知道如何测试他俩的性能,类应该占用内存多一些,最少类要保存有个指针地址在内存中
    你要关心性能就别用面向对象,面向对象有额外开销,相比代码可读可维护性来说,这点开销几乎可以忽略不计,说白了你追求错了方向,你只要代码没问题,逻辑正常,再慢也慢不过虚拟机类语言,比如.net,java,这类语言运行都不存在性能问题,所以别杞人忧天了,好好写好代码,让自己的代码更易读易维护,真要优化就如我上面说的,别用面向对象,加上调用频率高的函数使用汇编,但是,我得提醒你的是,大部分人写出来的汇编代码,还比不上编译器编译出来的。
      

  6.   

    2和3结合。
    用不用类完全得看你的设计,一般项目都会有一个单元叫Global放一些全局变量和函数,这里面叫单元方法,引用了单元就可以用,你看很多系统函数都是这种,引用单元就可以用,而不是类方法。