所谓的潇洒

导航

性能调优经历三

背景

  这是个门禁系统上位机软件,有个监控页面,实时接收设备传来的进出记录,并抓拍和录像。客户反馈说,

软件运行几天就特别卡。

定位问题

  1.只有个“卡”字无从下手,所有首先要做的就是搭建测试环境,开启抓拍和录像,模拟现场环境

  2.每隔几个小时看看内存、CPU、线程数等占用情况,操作下界面看看是否顺畅

  3.依次关闭抓拍和录像,重复步骤2

  4.非托管代码的内存泄露的排查;

  5.确定问题:关闭抓拍,内存占用问题有所改善,但线程数和内存占用还是不断增长,CPU问题不大

解决  

  1.有些代码在界面主线程中执行时间较长的任务,这种情况用线程来处理;

   还有些地方在循环执行某些任务,若不适合用线程处理,可以考虑Application.DoEvents();

  2.主要是集合,不能无限制的.Add,加到一定数量删除旧数据;顺便将线程共享的集合换成线程安全的类型,比如ConcurrentDictionary、ConcurrentQueue

  3.首先关注timer,可以在开始处stop结束处start来防止重入;

  4.排查循环或定时代码中有没有新建线程或异步代码(比如BeginInvoke、Task、SynchronizationContext.Post之类的);

  5.一定要用线程处理的地方,尽量考虑线程池,保证线程中的代码产生的异常能够捕获,以免导致异常而不能释放。

  6.使用using+stream实现Image类的save和fromfile方法

结果

  测试环境跑了一个星期,内存和线程数基本稳定。

 

posted on 2022-03-02 18:26  所谓的潇洒  阅读(31)  评论(0编辑  收藏  举报