C# winform程序cpu占用率问题

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

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

0

5个回答

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

0
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阻塞。

0

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

0

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

0

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

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c#Winform程序CPU占用高的原因和解决方法
程序CPU占用高的可能原因:1、存在死循环;为什么死循环会导致CPU占用高呢?      虽然分时操作系统是采用时间片的机制对CPU的时间进行管理的,也就是说到了一定时间它会自动从一个进程切换到下一个进程。但是,当进入别的进程后,若该进程告诉系统它现在不需要做什么,不需要那么多的时间,这个时候,系统就会切换到下一个进程,当切换到死循环所在进程后,由于它一直在循环,永远告诉系统它有事情做(实质仅在死...
C# 获取当前所有进程线程CUP占用率
监控系统所有进程的CPU使用情况 显示CPU占用大于0的进程,定时刷新 可以查看当前系统运行的各进程cpu占用率 在CSDN上找到两个都不太好用,自己写了一个VS2013环境下编译通过 也可以直接运行\bin\Debug目录下的ConsoleApplication1.exe文件 用途:查看自己写的程序那个线程运行时间最多,耗资源等。
C#实时曲线绘图—CPU使用率-利用WinForm
1.新建一个WinForm工程:2.找到工具箱中的数据下面的Chart控件,拖拽到界面上去,在属性里面修改Chart控件Name为cpuChart,修改series属性,ChartType选为Spline.操作过程如下图:3.最后再加个Button按钮,启动曲线绘制。后台代码Form1.cs如下所示:using System; using System.Collections.Generic; u...
C# 监视内存与处理器使用率
使用线程获取信息: class MonitorThread { public delegate void refresh(string mem, string cpu, string up, string down); public event refresh refreshEvent; public ThreadStart ts ; ...
C# 系统操作 实时显示CPU内存使用率
C# 系统操作 实时显示CPU内存使用率 Microsoft.VisualBasic.Devices.Computer myInfo = new Microsoft.VisualBasic.Devices.Computer(); //获取物理内存总量 pbMemorySum.Maximum = Convert.ToInt32(myInfo.Info.TotalPhysicalMemory/1024/1024); pbMemorySum.Value = Convert.ToInt32(myInfo.Info.TotalPhysicalMemory / 1024 / 1024); lblSum.Text = (myInfo.Info.TotalPhysicalMemory / 1024).ToString(); //获取可用物理内存总量 pbMemoryUse.Maximum = Convert.ToInt32(myInfo.Info.TotalPhysicalMemory / 1024 / 1024); pbMemoryUse.Value = Convert.ToInt32(myInfo.Info.AvailablePhysicalMemory / 1024 / 1024); lblMuse.Text = (myInfo.Info.AvailablePhysicalMemory / 1024).ToString(); //获取虚拟内存总量 pbVmemorysum.Maximum = Convert.ToInt32(myInfo.Info.TotalVirtualMemory / 1024 / 1024); pbVmemorysum.Value = Convert.ToInt32(myInfo.Info.TotalVirtualMemory / 1024 / 1024); lblVinfo.Text = (myInfo.Info.TotalVirtualMemory / 1024).ToString(); //获取可用虚拟内存总量 pbVmemoryuse.Maximum = Convert.ToInt32(myInfo.Info.TotalVirtualMemory / 1024 / 1024); pbVmemoryuse.Value = Convert.ToInt32(myInfo.Info.AvailableVirtualMemory/ 1024 / 1024); lblVuse.Text = (myInfo.Info.AvailableVirtualMemory / 1024).ToString();
c# 程序一直运行着,CPU占用率高的问题。
请教 c# 程序CPU占用率高的问题。 近日我也在写一个定时采集数据传递到服务器的工具,需要一直运行着,后台用一个线程每隔2秒就判断一次时间,是否到了设定的传输时间,到了点就传送。(System.Threading.Thread.Sleep(1000 * 2)) 现在它不传输的时候,我看了下cpu占用率50% 左右。 分析原因: 1. 使用了 while(true)这类的语句程序一直处
C# 多线程造成CPU占用率高解决办法
在C#开发中我们难免会用到多线程操作,而且很多时候需要开启多个线程一直监视某个状态,当线程多的时候就会造成CPU内存占用率过高。电脑配置低的根本吃不消。 private void button1_Click(object sender, EventArgs e) { Thread TH1, TH2, TH3, TH4, TH5; ...
c#获取系统和指定进程的CPU和内存占用率
c#控制台示例程序 封装两个类 一个获取系统的CPU和内存占用率 一个获取指定进程的CPU和内存占用率 支持获取多个所有同名进程的信息
C# fw4.0 获取操作系统CPU使用率和内存使用率(兼容Win32位和64位系统)
代码来自网络,经过本人修改,C++代码保持作者原始写法,自己添加了新方法,调用更方便,这里谢谢曾经的一个C++大神的帮助,没有他的帮忙 ,没有那么快实现需求所要求的功能,fw版本可以更换,网上有工具,希望能帮助到需要的朋友,同时也是对自己成果的记录
C# 任务管理器及控制台获取CPU占用率前3位进程
为获取CPU占用率,找了很多资料, 大部分都不合用, 找到了人家做的, 但又是图形界面下的, 于是又改造了一个控制台版本, 感觉还不错。
实时显示CPU/内存使用率
winform实现 实时显示CPU/内存的使用率,内存部分不知如何写。
CPU占用率高,用jstack定位代码位置
教你怎么用jstack定位CPU占用率高的代码 在linux环境下,可以通过top命令查看各个进程的cpu使用情况,默认按cpu使用率排序 编写死循环demo,提高CPU占用比例 写一个简单的死循环demo,使得CPU占用率飙升 /** * @author erbon * @date 2018/8/16 上午11:25 */ public class Demo { pub...
关于程序出现cpu占用过高的问题排查、解决办法以及避免代码中出现cpu占用率过高
程序中出现cpu暂用率过高,一般是跳入死循环导致,当出现cpu暂用率过高,请先检查代码中循环(for、while)是否死循环,如果是线程中开的while循环干一件事,请检查while中是否调用sleep睡眠,如果没有睡眠一定会造成cpu占用率过高,因为不调用sleep,cpu不会切出去;所有线程中的while,请记得加sleep,这样可以避免cpu占用率过高的现象。 注:sleep(0)表示切出
c# 获取64位和32位系统内存、cpu和磁盘使用情况
c# 获取64位和32位系统内存、cpu和磁盘使用情况,64位系统和32位系统在获取内存的时候有一点区别,代码里有注释,注意查看
C# 获取CPU使用率 附源码
下面是源码:using System; using System.Diagnostics; using System.IO; namespace cpu_get_info {     class Program     {         static void write_logs(string str)         {             //获取和设置当前目录。       ...
Linux CPU占用率过高时问题排查
1.查看CPU占用率高的进程 1.1> top 1.2> 用ps -eo pid,pcpu | sort -n -k 2 2.确定高cpu消耗的线程 2.1>top -H 2.2>ps H -eo pid,tid,pcpu | sort -n -k 3 3.查看进程的线程 3.1>pstree -p pid...
cpu占用率过高问题排查
背景介绍:项目war包发布到测试环境后,刚开始运行正常,过了一段时间所有查询都报504错误。登陆测试服务器查看日志,发现查询一直在报获取不到数据库连接的错误(数据库连接池用的是druid)。把配置文件下载到本地,本地代码正常运行,应该不是数据源配置的问题。楼主于是用了重启大法,重启后所有请求都正常了。但是接着发现一个很严重的问题,就是项目启动的时候cup占用率就到了100%,接着就开始了cpu占用...
获取指定进程的内存和cpu使用率
实时获取指定进程的内存和cpu占用情况,刷新频率为100ms,是为工程写的,为了测试有效抓的msn的内存和cpu信息
代码运行时 CPU占用率100%的解决方法
为什么运行代码时,CPU占用率用率100%? CPU占用率100%,怎么办?
C# 获取Cpu使用率,mac地址,磁盘使用率,内存使用率
       在工作中经常需要在C#中使用本机信息,我将其简单地整理了一下。        #region 获取磁盘占用率         internal static double GetUsedDiskPercent()         {             float? usedSize = GetUsedDiskSize();             float? totalS...
QT仪表显示程序CPU占用率太高,怎么优化?
最近要用QT仪表显示的程序,在网上下了个别人的程序做参考,但是发现在windows上运行还流畅,CPU占用率20%,但是在开发板上运行CPU占用率太大,达到了90%多,下面附上源码,希望有人能帮着优化一下,使cpu占用率能降低一点。
Linux下CPU占用率高分析方法
一、可能有线程一直占用CPU资源 1. 先通过 ps 查看进程状态,找出进程的PID(8209)。 2.jstack -l 8209 > /usr/local/work/tomcat/8209.stack 导出PID对应的线程信息到文件 3.对导出的线程文件下载本地做分析(可以文本打开) 4. 通过top -H -p 8209 命令查看对应进程是哪个线程占用CPU过高(eg:8308...
Linux环境下程序的多核CPU占用率高的问题分析和解决
1.项目问题 前端PDC双目倾斜相机客流统计项目中排查平台服务程序延时大的问题时,平台demo程序测试发现多核cpu中的某个核的占用率达到100%,导致组件中的目标检测线程和客流统计线程的单帧耗时达不到实时,存在延时和丢帧的问题。通过使用strace、pstack进行程序分析,最终找到导致单核占用率很高的原因和解决方法。本文详细描述了该问题的排查过程,并对排查流程做了相关总结。 2.背景技术及...
使用jstack分析java程序cpu占用率过高的问题
1,使用jps查找出java进程的pid,如3707 2,使用top -p 3707观察进程情况,然后Shift+h,显示该进程的所有线程。 3,找出CPU消耗较多的线程id,如3720,将3720转换为16进制0x7d0,注意是小写哦 4,使用jstack 3707 | grep -A 10 0x7d0 来查询出具体的线程状态。   通过这些线程状态便可基本定位问题之所在。 ...
如何定位CPU占用过高问题
程序运行后出现CPU占用过高,一般是代码有死循环等。top命令可以查看CPU使用情况,找到问题进程。 对CPU使用过高的进程的所有线程进行排序 ps H -e -o pid,tid,pcpu,cmd --sort=pcpu | grep xxx 得到CPU占用率最高的线程的线程号,比如2907进程的线程2909 使用gdb gdb gdb>attach 2907 gd
C#多核处理器,防止线程过多cpu占用满的情况
 当前项目使用第二个CPU Process.GetCurrentProcess().ProcessorAffinity = (IntPtr)2; Thread T_GetFiles = new Thread(new ThreadStart(ThreadGetFiles));//获取文件线程 T_GetFiles.Start(); ...
论常考面试题:线上排查线程死锁问题-CPU占用100%程序步骤
一、先说windows下,因为一些系统会安装windows server版本,所以也说一下,体验一下排查过程,很简单: 查消耗cpu最高的进程PID 根据PID查出消耗cpu最高的线程号 根据线程号查出对应的java线程,进行处理。 首先要营造出来一个死循环代码 首先查看PID: 左边红圈点击鼠标右键可以看见PID选项,然后选中查看,之后可以观察...
记一次java程序CPU占用过高问题排查
问题是这样的,将项目部署到服务器上后,发现应用程序的响应速度非常慢,于是开始进行了排查。 TOP 首先查看系统资源占用信息,TOP看一下 发现正在运行的JAVA项目CPU占用率很高,百分之200左右了,那么问题一定出在这个程序中 Ps -mp pid -o THREAD,tid,time 再通过ps命令查看这个程序的线程信息,tid代码线程ID,time代表这个线程...
C#版cpu使用率监控程序
使用C#版进行windows系统cpu使用率监控源码。测试时,与资源管理器的cpu使用率数值稍有不同,但是趋势是一致的。可以多采样几个点,取平均值。
通过 GetSystemTimes获取CPU占用率
__int64 CompareFileTime(FILETIME time1, FILETIME time2) { __int64 time1= time1.dwHighDateTime << 32 | time1.dwLowDateTime ; __int64 time2 = time2.dwHighDateTime << 32 | time2.dwLo...
WindowsVC++获取CPU整体使用率
《Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率》 http://blog.csdn.net/morewindows/article/details/8678359 配套程序。 讲解了在Windows系统下使用VC++获取系统CPU整体使用率。已经测试,能运行于WinXP和Win7系统。
关于创建线程后CPU使用率100%的问题
CPU使用100的问题之一
查找c++进程cpu占满的原因
最近运行服务器程序,在特定触发条件下,发现某个进程CPU占用率超过100%,心里一惊,因为服务器用c++写的,就决定调试下。 先按网上说的使用pstack指令打印cpu占满的进程的堆栈信息. 其中 pstack是基于gdb封装的shell脚本,有兴趣的可以去看一下。 pstack pid 发现正常的进程的堆栈显示比较正常,异常的进程的堆栈闲显示就全是??。 这个方法行不通,就换gdb...
java应用cpu使用率过高问题排查
---------------------------------------linux下如何定位代码问题------------------------------- 1、先通过top命令找到消耗cpu很高的进程id假设是123 2、执行top -p 123单独监控该进程 3、在第2步的监控界面输入H,获取当前进程下的所有线程信息 4、找到消耗cpu特别高的线程编号,假设是123 5、...
一个cpu占用率高的小问题
早上醒来便被系统报警短信施加了不小的压力,系统夜间多次报警,cpu使用率过高(超过90%),昨天晚上确实是上线了一个计算类的需求,不过算法相对简单(简单来说就是取两个字符串的公共子串,然后做一些处理),主观上认为不会因为这导致cpu爆掉,但是问题就是随着这个需求出现的,肯定拖不了干系,哎,bug排查往往就是这样,感觉某某地方不应该有问题,但是除了他又别无怀疑对象。 火急火燎的赶到公司,先申请
system_server等应用CPU占用率过高诊断的一种方法
问题 在测试过程中,我们通常发现诸如system_server,通过top命令查看这些应用一直在前 adb shell top查看这些一直在前列   这样我们就需要明确这些应用里面的线程哪个占用过多 使用 adb shell ps -t -p 刚刚的命令可以查询当前进程中的线程情况。这些对于开发了解哪些线程在占用cpu和资源很有帮助 adb she
CPU占用率100%解决方法
背景:下午到机房打开显示屏,操作一会儿发现电脑好卡,过了一会儿假死、鼠标有如木偶一样缓慢挪动,调出一个程序,居然半天才弹出显示。我可是一个不将就的人,机智的打开了Windows任务管理器(快捷键Ctrl+shift+esc),打开性能栏发现我的CPU简直是太狂躁了,使用率升到了100%: 。 故障排查:大多数人碰到这种情况都会重启电脑,但是我是一个学计算机的人,怎么能动不动就重启电脑呢。于是开
c++ 计算cpu占用率
计算CPU占用率就是获取系统总的内核时间 用户时间及空闲时间 其中空闲时间就是内核空转 所以内核时间包含空闲时间 然后计算 运行时间 = 内核时间 加 用户时间 减去 空闲时间 间隔时间 =  内核时间 加 用户时间 cpu使用率% = 运行时间 / 间隔时间 ; 无论单个进程cpu占用率还是系统整个cpu占用路 都是如此原理 核心代码就是如下几段
c++多线程cpu占用率过高解决之道
多线程并发在我们日常的工作中占有相当的需求比例,但是多线程程序很容易造成CPU使用率过高的问题,问题的原因在于我们一般的线程函数是用来处理一些简单的、需要循环处理的事情,例如一般情况下,在线程函数中我们常常使用下面的逻辑代码 while( is_running ) { // do work //...... } 如果 "do work" 的工作特别简单,或者有的时候我们在do...
C# 关于监测CPU,内存等资源耗费的代码(原码)
命名空间名字自己修改,包括CS,Designer.cs,.resx三个文件,请自己包含到自己的项目中