多线程程序占用CPU过多的问题
来源:互联网 发布:全民飞机巅峰飞跃算法 编辑:程序博客网 时间:2024/05/01 16:29
这几天在做windows服务这块,涉及到SOCKET和多线程问题,功能都已经实现了的,不过在调试的时候发现,服务不管在用不用就是无伦什么时候,始终占了很多CPU,25%。着实吓了一跳。后来想一想,主要是一个监听子线程一直在后台运行,片刻也不休息一下,不管有没有任务请求他一直都在跑。这样不累才怪了。
所以,解决办法也很简单,可以说是灰常的简单就是在循环监听的时候,偶尔休息一下。
Thread.Sleep(10);
一句话搞定,这样线程会不间断的休息一会,忙里偷闲一下,这时再调试,后台CPU占有率为0,当然实在不用的情况下哈。。
.NET相爱,一个子线程在不做任何控制,一直运行下,基本都是占25%的cpu,这样随便开几个线程,你的cpu就爆了。。。
还有一个问题,功能不是特备复杂的服务,对于内存的开销比较大,测试时候最大60M多的占有量。
解决办法,调用WIN32函数,释放内存,结果是,内存占有量锐减,少了很多,不过而已带了一个问题,性能上有点影响,不过不大。。
[DllImport("kernel32.dll")]
private static extern int SetProcessWorkingSetSize(IntPtr hProcess, int dwMinimumWorkingSetSize, int dwMaximumWorkingSetSize);
调用这个函数:SetProcessWorkingSetSize 在C++里面
BOOL SetProcessWorkingSetSize( HANDLE hProcess, SIZE_TdwMinimumWorkingSetSize, SIZE_TdwMaximumWorkingSetSize);
HANDLE hProcess 一个进程的句柄 ,下面的就是该进程的最小最大内存。是可以设置的。。
为了达到释放内存最大化的效果,参数都是 -1,-1并不代表一点内存也没有,是最小、、
如此调用:SetProcessMemoryToMin(Process.GetCurrentProcess().Handle);
很简单也很方便的,会让你的程序更节省资源。。
- 多线程程序占用CPU过多的问题
- WmiPrvSE占用CPU过多的问题
- 过多编译造成的CPU占用
- 服务器的w3wp.exe进程占用cpu和内存过多的问题
- 服务器的w3wp.exe进程占用cpu和内存过多的问题
- 解决w3wp.exe进程占用cpu和内存过多问题
- 找出java代码中占用cpu过多问题
- 上线问题定位1-cpu占用过多
- 多线程程序 怎样查看每个线程的cpu占用
- 关于占用过多内存的问题
- 关于MSSQL占用过多内存的问题
- 关于MSSQL占用过多内存的问题
- 解决Firefox占用系统资源过多的问题
- 一次inodes占用过多问题的解决
- WmiPrivSE.exe占用CPU过多的一种解决办法
- Chrome辅助框架CPU占用过多的解决办法
- 一个小白问题,关于程序的CPU占用问题
- CPU占用100%的问题
- Android ListView中的Button屏蔽onItemClick事件解决办法
- 云计算管理三利器:Nagios、Ganglia和Splunk
- 作业、进程、线程
- 大数乘法
- 【转】使用多域名实现资源并行下载
- 多线程程序占用CPU过多的问题
- rcp(插件开发)如何打开编辑器、视图、透视图
- js:字符串(string)转json .
- Windows Server 2003安装配置IIS
- 时间差TimeSpan用法
- sharepoint 2007 open with windows exporer 显示http的方式,而不是\\的方式
- 2012 BI发展趋势预测
- 体验C语言内存操作的魅力之范型
- JqGrid—功能強大的jQuery Grid Control