最近一直在抓鬼,程序中那扑朔迷离的bug已经完全的挫伤了我的信心。有些问题不论如何多不会在内网开发机上出现,但无论如何都会在外网出现。我曾经怀疑客户的使用方法,但当我亲眼目睹自己的程序是怎样抛出一个Exception而后有怎样的出现一连串的异常,到最后又是怎样的崩溃的时候,我真的很兴奋,我终于亲眼看到了,bug——这就是事实。
今天整了1000个机器人,给了程序足够的压力,正如所料,bug复现!我明确能复现的才有解决可能这一点,也清楚了为什么鬼一直找不到的原因——你没有给他足够的压力。
剖开一看:多线程的问题,为了提高程序的响应,我在工作负荷大的时候会动态的分出线程池的线程来执行工作,但我没有预见到这个工作到底会有多大的负荷,这也是造成我失误的最主要原因。顺藤摸瓜,找到了UI bug的原因,也同样是UI线程被这一堆的Pool线程给搅乱了。整了这些,跑起来,发现UI上某个控件原来客户提出的bug并没有解决,拿起刀子,下去——没有双缓冲!而后又发现这个控件根本就没有提供自动的双缓冲功能,那我就只好暂时最为一个手工业者了。双缓冲的性能绝对是看得见的。
虽然已经找到了鬼出现的地方,但要想真正的征服它,却绝对不比征服自己不吃冰激凌的难度低。用了很多连想也想不到的拐弯抹角的东西,在网上爬来爬去的,总想找个同样遭遇的难兄难弟。爬来爬去的,头不疼算怪事呢。
一切都没得奢望,只是想征服这个bug
bug,你快点出来吧,我找的就是你!
评论