背景:
阅读文章

浅谈代码优化

[日期:2007-05-05] 来源:  作者:lywin [字体: ]

  首先要说明的是,我本人不是学计算机的,所以让我谈理论基本上没有什么希望,而且很可能我说的属于或者概念上并不清楚,我只是针对mud制作当中一些我过去碰到或者思考过的问题随便谈谈自己的看法。并且,我也不打算谈怎么做优化,我只是简单聊聊优化的思路以及哪些地方需要我们多加注意。
   就一般情况来说,代码优化有三个目的:时间优化、空间优化以及代码本身的优
化。其中前两者是为了提高效率节省资源,后一种主要是为了美观啦:P。

   其实时间和空间是一对矛盾体。通常来说我们不大可能同时获得最佳的时间和空
间效率。我们需要做的是找一个平衡点,在这个状态下,我们的代码是“比较好”的。

   所谓时间,也就是指运行效率、计算量等等;所谓空间,主要指占用的内存资源
(当然也可能是硬盘空间资源)。
  
   现在的coder受硬件条件好的影响,往往不大注意进行优化。而95,96年那一批人
也许还记得,为了要在一个486上跑一个200人的mud,经常是每一行程序都要“抠”,
为的就是提高效率。现在说这个也许有点古板,毕竟微软那套东西给我们在编程习惯
上带来了不少负面影响。

   好,闲话少说。书归正传。
  
   我们在什么情况下需要考虑效率问题?
   并不是说每一行程序我们都要去优化它。只有关键性的程序我们才需要去注意,
至于那些几百年不用一次的程序,理他做甚。毕竟大家都有自己的事情做,所以我们
应该把有限的精力用在刀刃上:P。
   举例来说,purge这个指令用在成批处理id的时候确实会造成系统缓慢,但是我
们需要去处理它吗?顶多顶多,一两个月我们才用一回,何必为了这个浪费精力呢?
而象cmd go或者玩家心跳这种每时每刻都要用到的东西,拜托还是费点心思好好优化
一下,也许心跳当中减少一个条件判断,就可以让单机负载能力提高个10%。
   总之,在时间方面,我们主要考虑那些“经常”会出现的计算量,想办法减少他
们,肯定不是坏事。

   至于空间方面,现在毕竟内存都大了,每个object多个一两k不是什么大问题。
(现在还有人有释放内存的好习惯吗?heihei)所以我觉得别太浪费就好了。
   举例来说,大家看这个代码:
   int a,b;
   a=25;b=30;
   a=a+b;
   b=a-b;
   a=a-b;
   ok,看一下就知道了,这个是交换ab的数值。现在大概没有人这么用了,一般都
是用中间变量来做。但是早期的程序中,为了节省内存开销,这种写法是很常见的。

   我这里只是举一两个以前我自己写程序遇到的情况,来说明如何“随手”省一点
内存。相信大家都写过那种随机生成的npc,这种npc总不好叫做“机器人一号”、
“二号”吧。起个好点的名字?就得通过一个姓名字库来生成。有两种做法,一是把
字库用mapping或者array写到这个random npc的源文件当中去;另外是专门写个生成
名字的daemon。如果我的系统中有一千个这样的npc,那么在第一种方法里边,每个
npc身上都有一套字库的数据,显然的,第二种方法就比较节省空间。假如只有一两个
这样的npc,放身上就放身上吧,多不了几k的内存占用的。
   再比如,前边一个朋友写的那个制造的代码,为什么不用数据文件来存呢?毕竟
这些自造物品本质上都是一个东东,只是属性上稍微有一点差别。都用.c,浪费硬盘
不说,还危险。再多想一点,如果以后做数据库化,.c的东西改造就更是比较麻烦了。

   至于代码本身的优化,这个是个人兴趣问题吧,好看,方便就可以了,不要自己
都看着胡涂就好。


尊重作者 转载请注明出处52mud.com

收藏 推荐 打印 | 录入:sbso | 阅读:
相关内容      
本文评论   [发表评论]   全部评论 (0)
内容推送
52mud提供
一起回忆泥巴游戏QQ群68186072
52mud官方微信公众平台
热门评论