关于性能方面的问题,大家帮帮忙。

时间:2022-12-03 20:10:39
我现在有个项目,功能非常多,我现在想重构,大家帮忙分析下性能。

我现在的想法是把每个功能模块化,也就是一个功能搞成一个单元(以前是基本所有功能都在一个单元里,而且都是全局函数或变量)。


比如说原功能:
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那么效率就不行吧,不过现在有个类方法,类方法不需创建,不了解他的性能如何?

大家帮忙解密疑团,在此谢过

9 个解决方案

#1


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

#2


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


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

#3


引用 2 楼 renaihaore 的回复:
Quote: 引用 1 楼 pathletboy 的回复:

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


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

你要了解Create到底干了些什么,就知道到底慢不慢了,不要想当然“创建”就是繁琐的,除了一些自定义的初始化,Create其实只是为类结构申请了内存,就像你结构体+方法一样,类的构造,等于申明了一个结构体指针并为该指针分配内存空间。

#4


引用 3 楼 pathletboy 的回复:
Quote: 引用 2 楼 renaihaore 的回复:

Quote: 引用 1 楼 pathletboy 的回复:

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


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

你要了解Create到底干了些什么,就知道到底慢不慢了,不要想当然“创建”就是繁琐的,除了一些自定义的初始化,Create其实只是为类结构申请了内存,就像你结构体+方法一样,类的构造,等于申明了一个结构体指针并为该指针分配内存空间。


申请空间这个我到是知道的,如我原来的代码全部都是全局变量 全局函数,我把每个功能改成每个类调用差距大吗? 不好意识,我不知道如何测试他俩的性能,类应该占用内存多一些,最少类要保存有个指针地址在内存中

#5


引用 4 楼 renaihaore 的回复:
Quote: 引用 3 楼 pathletboy 的回复:

Quote: 引用 2 楼 renaihaore 的回复:

Quote: 引用 1 楼 pathletboy 的回复:

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


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

你要了解Create到底干了些什么,就知道到底慢不慢了,不要想当然“创建”就是繁琐的,除了一些自定义的初始化,Create其实只是为类结构申请了内存,就像你结构体+方法一样,类的构造,等于申明了一个结构体指针并为该指针分配内存空间。


申请空间这个我到是知道的,如我原来的代码全部都是全局变量 全局函数,我把每个功能改成每个类调用差距大吗? 不好意识,我不知道如何测试他俩的性能,类应该占用内存多一些,最少类要保存有个指针地址在内存中

你要关心性能就别用面向对象,面向对象有额外开销,相比代码可读可维护性来说,这点开销几乎可以忽略不计,说白了你追求错了方向,你只要代码没问题,逻辑正常,再慢也慢不过虚拟机类语言,比如.net,java,这类语言运行都不存在性能问题,所以别杞人忧天了,好好写好代码,让自己的代码更易读易维护,真要优化就如我上面说的,别用面向对象,加上调用频率高的函数使用汇编,但是,我得提醒你的是,大部分人写出来的汇编代码,还比不上编译器编译出来的。

#6


如果只是想把程序整理得清楚一点,又不想创建太多的对象的话,我建议用LZ最后一种方法,这样调用的地方更改还少一些。

#7


一般类的创建,应该是很快的,不会是性能的瓶颈

#8


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

#9


应该差不多,没什么太大区别!主要看怎么用着方便吧!影响性能的一般都是数据库之类的操作,至于你的创建和释放应该差别不大!

#1


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

#2


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


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

#3


引用 2 楼 renaihaore 的回复:
Quote: 引用 1 楼 pathletboy 的回复:

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


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

你要了解Create到底干了些什么,就知道到底慢不慢了,不要想当然“创建”就是繁琐的,除了一些自定义的初始化,Create其实只是为类结构申请了内存,就像你结构体+方法一样,类的构造,等于申明了一个结构体指针并为该指针分配内存空间。

#4


引用 3 楼 pathletboy 的回复:
Quote: 引用 2 楼 renaihaore 的回复:

Quote: 引用 1 楼 pathletboy 的回复:

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


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

你要了解Create到底干了些什么,就知道到底慢不慢了,不要想当然“创建”就是繁琐的,除了一些自定义的初始化,Create其实只是为类结构申请了内存,就像你结构体+方法一样,类的构造,等于申明了一个结构体指针并为该指针分配内存空间。


申请空间这个我到是知道的,如我原来的代码全部都是全局变量 全局函数,我把每个功能改成每个类调用差距大吗? 不好意识,我不知道如何测试他俩的性能,类应该占用内存多一些,最少类要保存有个指针地址在内存中

#5


引用 4 楼 renaihaore 的回复:
Quote: 引用 3 楼 pathletboy 的回复:

Quote: 引用 2 楼 renaihaore 的回复:

Quote: 引用 1 楼 pathletboy 的回复:

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


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

你要了解Create到底干了些什么,就知道到底慢不慢了,不要想当然“创建”就是繁琐的,除了一些自定义的初始化,Create其实只是为类结构申请了内存,就像你结构体+方法一样,类的构造,等于申明了一个结构体指针并为该指针分配内存空间。


申请空间这个我到是知道的,如我原来的代码全部都是全局变量 全局函数,我把每个功能改成每个类调用差距大吗? 不好意识,我不知道如何测试他俩的性能,类应该占用内存多一些,最少类要保存有个指针地址在内存中

你要关心性能就别用面向对象,面向对象有额外开销,相比代码可读可维护性来说,这点开销几乎可以忽略不计,说白了你追求错了方向,你只要代码没问题,逻辑正常,再慢也慢不过虚拟机类语言,比如.net,java,这类语言运行都不存在性能问题,所以别杞人忧天了,好好写好代码,让自己的代码更易读易维护,真要优化就如我上面说的,别用面向对象,加上调用频率高的函数使用汇编,但是,我得提醒你的是,大部分人写出来的汇编代码,还比不上编译器编译出来的。

#6


如果只是想把程序整理得清楚一点,又不想创建太多的对象的话,我建议用LZ最后一种方法,这样调用的地方更改还少一些。

#7


一般类的创建,应该是很快的,不会是性能的瓶颈

#8


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

#9


应该差不多,没什么太大区别!主要看怎么用着方便吧!影响性能的一般都是数据库之类的操作,至于你的创建和释放应该差别不大!