C# winform程序cpu占用率问题

一个雷达显控界面,项目调试运行cpu占用率很高,界面也很卡顿;但是用性能探测器运行,
cpu占用率非常低,很流畅这是怎么回事?
我怀疑是不是线程有异常退出的时候,debug模式要打印错误信息,导致和卡顿?
这个是debug的占用率
这个是debug模式运行的cpu占用率

图片说明
这个是性能探测器运行的cpu占用率,一行代码没改

5个回答

你的线程代码怎么写的,有没有用到同步操作,有没有用lock不正确加锁,确保耗时的操作都放在工作线程里了么?

antikou1
antikou 需要HACK一下进程树
一年多之前 回复
sinat_36035248
sinat_36035248 线程不太懂,不正确的lock是怎么样的?
一年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复sinat_36035248: 不正确的lock会导致主线程挂起,导致程序卡。如果你主线程阻塞在通讯、io上面,那么cpu占用就很低。
一年多之前 回复
sinat_36035248
sinat_36035248 lock不正确具体指什么?
一年多之前 回复
sinat_36035248
sinat_36035248 不确定我写的对不对,如果lock写的不对会导致debug和性能探测器的cpu占用率不一样么
一年多之前 回复

不正确的lock有很多种,造成界面假死的有两个,一个是死锁,一个是同步过度。
这里演示下同步过度:
比如说界面里面写
lock(obj)
{
val = 某个造成阻塞的函数();
更新界面(val);
}
或者
this.invoke(delegate()
{
val = 某个造成阻塞的函数();
更新界面(val);
});
无论哪种写法,都会导致UI阻塞。

是不是一些数据运行之后没有及时释放?比如io流和请求响应流等。又或者你启动线程之后是一直处于运行状态没有关闭,设置一下超时响应看一下能不能解决这个问题。运行完的东西要及时释放或者关闭

debug监听事件太多了吧,换release编译运行不卡就可以了,debug卡一点没事。

是不是有类似
while(1){};的监听死循环? 是的话,在其中加个sleep,CPU使用率就会下来了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!