所谓的潇洒

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

性能调优经历三

背景

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

软件运行几天就特别卡。

定位问题

  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   所谓的潇洒  阅读(32)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示