当前位置:编程学习 > C#/ASP.NET >>

将重复C#代码段重构成方法,运行效率是否会提高?

RT.
有没研究有没研究。 重构 c# --------------------编程问答-------------------- 为什么会提高?提炼成方法只会增加调用开销。 --------------------编程问答-------------------- 不会提高,多次调用子函数会会费时间的,所以对一些频繁调用的函数会做成inline函数,重构是为了你更好的维护 --------------------编程问答-------------------- 更好改而不是更快 --------------------编程问答-------------------- 你自己测试一下就知道了。

这样做,是为了“只写一次代码”,从而避免你在维护旧的功能逻辑时总是丢三落四地引出不一致性。 --------------------编程问答-------------------- 重构代码并没有修改程序的逻辑,而只是在“形式”上让你感觉更爽,所以不存在性能的提升。 --------------------编程问答-------------------- 那种自己不测试的人,容易纠结在什么“洁癖”问题上觉得特别吸引人的眼球,而对于实践性的东西则不重视。

学生不了解工程上哪些是“垃圾”,因此容易吧精力都放在斤斤计较名词儿上。那么尽早摆脱幼稚病的最好办法,就是多写测试程序。

用测试说话,而不是用理论。 --------------------编程问答-------------------- 耶 以上总结 的很到位 --------------------编程问答-------------------- 1.首先要分清重构和重写的区别,
  重构是增加代码,而不会修改已经通过测试的代码,目的是:提高以后的工作效率和产品质量;
  重写是修改为通过测试的代码,目的是:尽快的通过测试
2.程序员编写代码是为了尽快通过测试,而不是"提高运行效率"
  代码的重新组织不一定能提高运行效率,
  如果有性能方面的要求,请在测试接口中体现
--------------------编程问答-------------------- 写成方法,看人看起来更爽,而且比较直观的调用,也利于系统日后维护。 --------------------编程问答-------------------- 重复的代码提取出来,生成一个新的函数,在运动时,必然会增加内存操作,从而减速。只是为了代码便于维护才使用的技术 --------------------编程问答-------------------- --------------------编程问答-------------------- 只是为了减少代码的重复度,方便日后管理 --------------------编程问答-------------------- 在c++中,为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。 

所以封装成方法是会降低运行效率的~

但为了减少代码的重复度,方便日后管理,必须封装~ --------------------编程问答-------------------- 实践是证明是否会提高的唯一标准。

我的实践表明;存在把代码段封装成方法从而提高了程序执行速度的情况。

我的应用背景是图像处理某些算法上。

提高的原因从反汇编上分析是:  单独把代码封装成方法后,因为这些代码中一般涉及到的变量比较少,编译器可以充分利用CPU中的寄存器,从而减少直接访问内存。这样造成的加速 比 调用函数时的出栈压栈之类的 减速 要更明显。 

我准备挨批了。 
--------------------编程问答--------------------
引用 14 楼 laviewpbt 的回复:
实践是证明是否会提高的唯一标准。

我的实践表明;存在把代码段封装成方法从而提高了程序执行速度的情况。

我的应用背景是图像处理某些算法上。

提高的原因从反汇编上分析是:  单独把代码封装成方法后,因为这些代码中一般涉及到的变量比较少,编译器可以充分利用CPU中的寄存器,从而减少直接访问内存。这样造成的加速 比 调用函数时的出栈压栈之类的 减速 要更明显。 

我准备挨批了。 


在某些特殊的情况下,这的确是成立的。 --------------------编程问答--------------------
引用 14 楼 laviewpbt 的回复:
实践是证明是否会提高的唯一标准。

我的实践表明;存在把代码段封装成方法从而提高了程序执行速度的情况。

我的应用背景是图像处理某些算法上。

提高的原因从反汇编上分析是:  单独把代码封装成方法后,因为这些代码中一般涉及到的变量比较少,编译器可以充分利用CPU中的寄存器,从而减少直接访问内存。这样造成的加速 比 调用函数时的出栈压栈之类的 减速 要更明显。 

我准备挨批了。 


既然你做了思想准备 我就批批你吧~
CPU中的寄存器 只有那么几个 每个最多就是64bit 你觉得能存多少
还有CPU的一级缓存 二级缓存也只有1~2M

所以处理图片只能内存了~

当然如果是算算术~ 应该是如你说的~
--------------------编程问答--------------------
引用 16 楼 moonwrite 的回复:
Quote: 引用 14 楼 laviewpbt 的回复:

实践是证明是否会提高的唯一标准。

我的实践表明;存在把代码段封装成方法从而提高了程序执行速度的情况。

我的应用背景是图像处理某些算法上。

提高的原因从反汇编上分析是:  单独把代码封装成方法后,因为这些代码中一般涉及到的变量比较少,编译器可以充分利用CPU中的寄存器,从而减少直接访问内存。这样造成的加速 比 调用函数时的出栈压栈之类的 减速 要更明显。 

我准备挨批了。 


既然你做了思想准备 我就批批你吧~
CPU中的寄存器 只有那么几个 每个最多就是64bit 你觉得能存多少
还有CPU的一级缓存 二级缓存也只有1~2M

所以处理图片只能内存了~

当然如果是算算术~ 应该是如你说的~


现代x86处理器的寄存器其实很多的,Core i7估计有上百个了吧。

虽然逻辑上看还是只有那么几个,但是处理器会使用被叫做“寄存器重命名”的机制利用那些备用的寄存器。

一本很经典的书(书名忘了)说了一句很经典的话,其实Pentium(当然包括了如今的所有处理器)是一颗披着x86外衣的RISC机器。或者说是一颗兼容CISC指令的RISC机器。 --------------------编程问答-------------------- 科普下:

http://zh.wikipedia.org/wiki/%E5%AF%84%E5%AD%98%E5%99%A8%E9%87%8D%E5%91%BD%E5%90%8D --------------------编程问答--------------------
引用 16 楼 moonwrite 的回复:
Quote: 引用 14 楼 laviewpbt 的回复:

实践是证明是否会提高的唯一标准。

我的实践表明;存在把代码段封装成方法从而提高了程序执行速度的情况。

我的应用背景是图像处理某些算法上。

提高的原因从反汇编上分析是:  单独把代码封装成方法后,因为这些代码中一般涉及到的变量比较少,编译器可以充分利用CPU中的寄存器,从而减少直接访问内存。这样造成的加速 比 调用函数时的出栈压栈之类的 减速 要更明显。 

我准备挨批了。 


既然你做了思想准备 我就批批你吧~
CPU中的寄存器 只有那么几个 每个最多就是64bit 你觉得能存多少
还有CPU的一级缓存 二级缓存也只有1~2M

所以处理图片只能内存了~

当然如果是算算术~ 应该是如你说的~


我说的那种情况确实是存在的,因为我确实遇到过,当然一般情况下封装 后会慢些的。  --------------------编程问答--------------------
引用 19 楼 laviewpbt 的回复:
Quote: 引用 16 楼 moonwrite 的回复:

Quote: 引用 14 楼 laviewpbt 的回复:

实践是证明是否会提高的唯一标准。

我的实践表明;存在把代码段封装成方法从而提高了程序执行速度的情况。

我的应用背景是图像处理某些算法上。

提高的原因从反汇编上分析是:  单独把代码封装成方法后,因为这些代码中一般涉及到的变量比较少,编译器可以充分利用CPU中的寄存器,从而减少直接访问内存。这样造成的加速 比 调用函数时的出栈压栈之类的 减速 要更明显。 

我准备挨批了。 


既然你做了思想准备 我就批批你吧~
CPU中的寄存器 只有那么几个 每个最多就是64bit 你觉得能存多少
还有CPU的一级缓存 二级缓存也只有1~2M

所以处理图片只能内存了~

当然如果是算算术~ 应该是如你说的~


我说的那种情况确实是存在的,因为我确实遇到过,当然一般情况下封装 后会慢些的。 


我相信这种情况的存在,但是因为编译器、目标机器的运行环境等等的差异,这属于非常高级的优化技巧。你观察到某个现象,不等于说你掌握了这种优化技术,并且能够有效地使用它。就好像人类在加速器中观察到接近光速的粒子的相对论时间停滞效应,不等于人类就可以进行星际旅行了。 --------------------编程问答-------------------- 从理论上说效率会降低,因为增加了入栈出栈和调用等操作。

但是这个效率基本上可以忽略不计。我们一般不在这上面抠性能。

其实,你换个角度想想,把重复的代码写成方法,可以在将来更好地优化效率。比如你的方法的效率改进一点,所有使用这个方法的地方都受益。 --------------------编程问答-------------------- 四楼正解。。。。 --------------------编程问答-------------------- 如果我们的水平仅仅限于见识过自行车,那么我们一定会纠结于自行车的某个零件是否“效率高”的问题,我们一定会说“给自行车装上发动机(但是不懂什么是燃油),降低了其脚蹬的效率”。

编程也是这样。如果你抠那几条语句,可能得到一种关于“个别语句效率”的解答。如果你整体地去看一个产品设计水平是否提高,你会发现许多效率问题的解决都是靠重构,而不是在个别语句上。

但是你给仅仅见识过自行车的人去说发动机,是没有意义的。只能先让他改变“他自己的标准”,让他自己悟出来。这就强调实事求是地亲自动手测试,而不是一味地强调理论。 --------------------编程问答-------------------- 我觉得会稍微有点降低运行速度。(微乎其微)
因为重构的话,多了个调用的过程。

但是给我们程序在内存消耗,代码清晰度,损失一点点运行速度是值得的。 --------------------编程问答--------------------
引用 14 楼 laviewpbt 的回复:
实践是证明是否会提高的唯一标准。

我的实践表明;存在把代码段封装成方法从而提高了程序执行速度的情况。

我的应用背景是图像处理某些算法上。

提高的原因从反汇编上分析是:  单独把代码封装成方法后,因为这些代码中一般涉及到的变量比较少,编译器可以充分利用CPU中的寄存器,从而减少直接访问内存。这样造成的加速 比 调用函数时的出栈压栈之类的 减速 要更明显。 

我准备挨批了。 

确实有这种情况,不过与编译器和环境关系比较大,这种优化不可控。如果是C的话倒是可以register。 --------------------编程问答-------------------- 运行效率是不会提高的,关键是可以减少代码重复使用~  --------------------编程问答-------------------- 运行速度还是从算法上来找原因。或者直接是硬件上。

语言层面的速度差异,微乎其微。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,