|
绫濑芽留公司一个程序员写的程序崩了,一查原因才发现原来程序在运行一段时间以后,电脑的CPU竟然飙到了99%,然后就直接卡死了,幸运的是,这种情况是100%可以复现的,我怀疑他代码里面写了“死循环”,然后就让他通过IDE去监控CPU过高的地方,结果他监控的方式却让我有点惊讶,只见他打开了他认为可能会出现死循环的地方,在那下断点,研究起代码来……
我之所以惊讶,那是因为这个程序员已经有七年的软件开发经验了,想不到连监控CPU负载都不会,还是选择使用传统的下断点监控的方式,虽然说这种方式一定程度上是能发现问题,可是,如果是这个“死循环”藏得比较深,那你就调吧,估计调半天都查不出原因。
然后,我就告诉他,现在他写的程序是100%可以复现这个“死循环”的,那么只要使用IDE运行起这个软件,然后就可以在IDE里面查看软件运行时哪些代码被频繁执行以及大部分占用CPU过高的代码,如图所示:
当然了,如果发现程序占用内存过高,也可以通过监视程序调用情况,查看哪些代码在执行时频繁调用内存或者占用内存过高的情况,如图所示:
以Visual Studio为例,Visual Studio中有个叫做“诊断工具”的工具,可以实时显示CPU和内存的使用情况,遇到CPU和内存使用过高的情况时,我们可以在“诊断工具”里面自己查看CPU和内存到底是被哪些代码所影响,然后我们就可以通过修改代码逻辑来减少CPU和内存使用过高的情况了!
当然了,不是所有CPU和内存使用过高都可以通过修改代码去解决,比如当我们需要调用一张像素比较大的图片的时候,因为需要处理图片,因此图片是缓存在内存当中的,图片越大,占用的内存越高,此时单纯得通过修改代码其实很难优化内存占用问题。
这时候,如果增加“虚拟内存”还解决不了问题,代码优化又会让代码看起来晦涩难懂,这时候最简单粗暴的方法就是增加物理内存了!
但无论怎么说,只要是代码问题导致的CPU和内存增加,都可以通过监控CPU和内存的方式去查找原因,根据原因去想不同的对策!
我这么一说,同事豁然开朗,他说他干了七年程序员,知道Visual Studio里面有“诊断工具”这个东西,但是具体怎么用,他还从来没有关心过,这下算是清楚了,以后再去查找CPU和内存升高的问题就再也不用以前下断点调试这个笨办法了!
其实,惊讶之余,我也理解为什么我的同事干了七年程序员连这点东西都不会,因为这些事情我见得比较多了。
比如我见过一个五年工作经验的程序员不会封装dll文件,当时我是蛮惊讶的,后来才知道他以前做的项目都是写在一个包里面的,只知道如何调用dll,但是从来没有封装过dll给别人用过。
我也见过很多程序员使用强类型去声明变量的,不是说这样不可以,只是现在大部分编程语言使用弱类型去声明变量已经被大部分程序员所习惯了,所以,遇到使用强类型去声明变量的,对于我来说,看起来是比较新鲜的!
究其原因,有的是真不知道可以用弱类型来声明变量,这和他们使用的IDE也有关系,比如说我就遇到过不少还在使用Visual Studio2008或者Visual Studio2012的,Visual Studio2012我忘了是否可以使用弱类型来声明变量了,但是Visual Studio2008是肯定不可以的!
我最近和一个年近50的程序员聊天的时候就正好聊到了这些问题,他的想法就是代码越简单越好,现成的框架他能不用就不用,这是他的逻辑,而且,他也不是说排斥去用框架,而是框架对他来说算是个新鲜玩意了,过去写代码哪有那么多东西。
通过这两个例子,我其实想说的就是一个人对于代码、对于IDE的使用,其实是受过去的工作所影响的,有些你我认为很常见的操作,他们如果一直没接触,又不是太喜欢去研究,那不知道也就不算奇怪了!
|