编程的坏习惯之资源浪费


永远记住:任何浪费资源的行为都是不可取的。这一点同样适用于计算机编程。

我们在计算机编程的时候,除了需要实现必须的功能之外,还需要考虑两个很重要的指标:时间复杂度和空间复杂度。时间复杂度指的就是程序执行的时间长度,空间复杂度指的是程序执行消耗的内存存储量。这里我把空间复杂度扩展一下,指的是消耗的计算资源,包括内存,CPU,硬盘,数据库开销。

  1. 尽管现在内存容量已经很大,但是对于程序而言,消耗的内存永远是越少越好!这里只说一些常见的问题:定义变量。我们在定义变量的时候应该遵从小范围原则,就是如果能够定义局部变量,那就不要把这个变量放到全局来,而且如果没有用到,不要对这个对象实例化。所谓的对象实例化,就是new,也就是说定义变量可以,但是在你用到的时候再new。因为程序中有很多情况,所以有时候这个变量定义了却没有被用到,那么如果你刚开始就把对象定义并且实例化了,无疑会浪费不必要的内存空间,所以定义和实例化变量的原则是:不到万不得已不定义。就是说如果不定义这个变量程序进行不下去了,那么这个变量才应该被定义和实例化出来,否则你可以考虑把他放在局部去,在需要的时候才实例化;
  2. 如果你的程序中同时定义了相同的或者类似的很多个变量或者对象,其实这是很消耗CPU的,这时候可以考虑使用对象的复制(clone),这样能够减少很多不必要的系统开销;
  3. 数据库的开销是很大的,数据库连接池很必要,另外如果同一个类用到很多次数据库连接,那么尽量不要不停的开闭,这样会造成很大的资源消耗,而是应该拿到一个连接之后把所有的数据库操作全部做完,再释放连接(非常重要)。在计算机中,不用的东西要全部取消掉:变量,类,数据库连接。用完之后要全部处理掉(destroy),当然Java有内存回收机制(双刃剑),情况另行讨论;
  4. 硬盘的开销在程序使用的时候是很少的,因为现在计算机的瓶颈基本上卡在了硬盘的速度上。因为硬盘的速度很低,所以很多时候我们愿意把数据放到内存当中以提高速度,而实际上,如果一个程序中的有些数据很少用到,那么为了分担内存的压力,是可以把一些数据存放到硬盘上的,比如我们常用的配置文件信息等,这样能够节省一部分的内存空间,毕竟内存空间比硬盘珍贵的多。

其实在编程的过程中这种资源的浪费是很多的,需要从小的地方做起,哪怕是一个小小的变量也要考虑它是不是需要定义。空间复杂度是衡量一个程序好坏的重要标准之一


版权信息:本文来自老杨个人网站,作者老杨原文地址,转载请注明出处。

如果喜欢本站,敬请订阅:老杨个人网站。谢谢惠顾!


分类: 情感随笔
标签: , , ,
收藏本文: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网

前18排已经被占了我要占座

  1. 编程,对小农夫来说太难了

    回复Ta

    嗯,比较专业了这个

    回复Ta

  2. 我平时也就是写点网站代码,还谈不上浪费资源吧~

    回复Ta

    网站代码如果浪费的话,那么有可能导致你的服务器速度减慢,或者网页代码增多,用户打开的速度变慢,也是有负面影响的

    回复Ta

  3. 高端项目,编程好难啊。

    回复Ta

    也不是什么高端项目了,都是最基本的

    回复Ta

  4. 不会变成的路过

    回复Ta

    你应该会,php你不会么?

    回复Ta

  5. 感觉少了一个,那就是网络开销。综合起来时间就是效率的问题,空间就是精炼的问题,也可说是效率的问题。

    回复Ta

    嗯,网络开销其实仍然是内存浪费的问题了,不过这是另外一个编程范围,那就是网络编程

    回复Ta

    网络开销应该算程序设计效率问题,在同一时刻未必会更多内存浪费,不过你的理解已经很上层次了,经验上应该比较丰富,否则很难提炼这些内容,新手提炼出来也未必会说的清楚。
    很多只会ASP、PHP或配置个服务器的网友可能很难理解这些内容,很不错,支持你。

    回复Ta

    谢谢,我是写给师弟师妹的,希望他们能理解

  6. 我只要能用就行

    回复Ta

    这个不是针对用户的,是针对程序员的

    回复Ta

  7. 刚看到你这篇文章。可别说,今天sky发现我在杨式框架中添加了一个读xml流没有关闭……

    回复Ta

    这种问题防不胜防

    回复Ta

  8. 太高深的理论了。呵呵

    回复Ta

    这个还好吧,不算高深,都是细节的东西

    回复Ta

:emotion58 :emotion57 :emotion563 :emotion562 :emotion561 :emotion560 :emotion56 :emotion559 :emotion558 :emotion557 :emotion556 :emotion554 :emotion552 :emotion551 :emotion550 :emotion55 :emotion547 :emotion546 :emotion544 :emotion543 :emotion542 :emotion541 :emotion540 :emotion54 :emotion539 :emotion538 :emotion537 :emotion536 :emotion535 :emotion534 :emotion533 :emotion532 :emotion531 :emotion530 :emotion53 :emotion529 :emotion526 :emotion525 :emotion524 :emotion523 :emotion522 :emotion521 :emotion520 :emotion52 :emotion519 :emotion518 :emotion517 :emotion516 :emotion515 :emotion514 :emotion513 :emotion512 :emotion511 :emotion510 :emotion51 :emotion119 :emotion113