2013-5-3 工作笔记

来源:互联网 发布:mysql5.7 修改端口号 编辑:程序博客网 时间:2024/06/05 10:33

1,任何队列 都要设上限。 不然就可能在使用上不断push而造成内存不停增加。

2,修改源代码时,要考虑到是否 改动了原有的设计,如果改动了,就要小心了,就要像重新设计一样考虑全面,而不仅仅是修bug或者说增改需求。


上面两点是由于:

在最近 代码改动中,突然内存暴涨了,后来查到原因是  在修改一个不断播放的动画 改为定时播放动画时出的问题。


原有设计是这样的

来了一个信号,告知要播放动画了,于是new一个出来,播放,播放完毕后删掉。


当时修改时,来一个信号,就直接 new完后,push到一个队列(没设上限),启动一个定时器,定时器timeout后 从队列拿出首元素,播放,播放完毕后删掉


这样导致的后果是,在定时器timeout的这段时间t里,如果信号来了N个,timeout时delete掉M个,

只要始终N > M 就会造成泄漏了,而且相当之快,测试了出问题的代码12分钟泄漏了70M  。 = = !,但是不改之前,完全是没有泄漏的。


思考后,改成了,来了 信号,存起有用的元素在队列里,队列设上限为K个,定时器timeout时,要播M个就new M个,播完释放掉。


这样就没有问题了。