性能调优经历一
项目背景:
这是个门禁管理系统,有个监控进出记录的界面,开启监控时可以选择是否抓拍和录像。其中,抓拍是用onvif协议请求摄像头进行,而录像是用的VLC。
步骤:
1.收到反馈:长时间开启监控,电脑很卡
2.定位“卡”的分类
1>查看客户端电脑配置,排除配置太低
2>搭起测试环境,重现问题
3>打开任务管理器,观察cpu占用、内存占、IO占用、线程数及网络
结论:内存占用不断增长。
3.定位功能
1>开启监控,不选择抓拍和录像,观察任务管理器,内存稳定
2>开启监控,选择抓拍,观察任务管理,内存不断增长
3>开启监控,选择录像,观察任务管理,内存稳定
结论:抓拍功能
4.定位代码块(确定了抓拍功能,而抓拍功能的代码大致分为onvif请求和处理图片两部分)
1>可能是图片释放不及时,加上dispose测试效果,无效果
2>注释掉图片处理代码,测试效果,无效果
3>注释掉onvif请求代码,将图片来源改为本地文件,测试效果,内存稳定
结论:onvif请求
5.优化onvif
1>查看onvif调用及onvifHelper类内部的stream是否有释放,没释放的加上using
2>查看其他不常用的类是否有Close或Dispose方法且未调用,加上using
3>测试效果,内存稳定
结束语:
解决了前任长期头疼的遗留问题,小小的成就感开心一整天。^_^
我们自己写代码的时候要有意识地关注内存释放、线程安全、CPU占用、执行速度等问题;网络上复制来的现成代码,要经过严格地测试及优化,最终转为自己的东西;养成写博客的习惯,总结经验教训,复用可靠代码。