当前位置:编程学习 > C#/ASP.NET >>

winfrom 多线程仍占用 CPU近100%


我弄了个多线程网络爬虫抓邮箱

虽然使用了多线程,但CPU占用仍然异常的高,而且 一起找不出来是哪个地方占用了资源

有什么办法可以检测出哪个方法挤占了CPU资源吗?

检测了一天,没找出问题,求检测办法!! --------------------编程问答-------------------- 虽然使用了多线程,但CPU占用仍然异常的高

什么意思。多线程没有降低CPU使用率的功能,你的话好比,虽然我吃了很多饭,但是还是感觉很饱。 --------------------编程问答--------------------
引用 1 楼 caozhy 的回复:
虽然使用了多线程,但CPU占用仍然异常的高

什么意思。多线程没有降低CPU使用率的功能,你的话好比,虽然我吃了很多饭,但是还是感觉很饱。

别咬文嚼字了 还是帮人家解决实际问题比较好。 我知道有个检测.net内存占用检测工具,它可以检测你程序里占用大量资源的代码块,叫.NET Memory Profiler  --------------------编程问答-------------------- 屌丝。。。。 --------------------编程问答--------------------
引用 2 楼 Pc498471249 的回复:
Quote: 引用 1 楼 caozhy 的回复:

虽然使用了多线程,但CPU占用仍然异常的高

什么意思。多线程没有降低CPU使用率的功能,你的话好比,虽然我吃了很多饭,但是还是感觉很饱。

别咬文嚼字了 还是帮人家解决实际问题比较好。 我知道有个检测.net内存占用检测工具,它可以检测你程序里占用大量资源的代码块,叫.NET Memory Profiler 


人家问CPU,你跟人家说内存,果然是“不要咬文嚼字”,解决实际问题! --------------------编程问答-------------------- 我感觉应该是打开了很多网页导致的 --------------------编程问答-------------------- 检测了一天没找到问题?你的多线程挨着挨着停,看哪个停了cpu占用不高, --------------------编程问答-------------------- 你试着在线程里加入一定的sleep,可以有效降低CPU使用率。 --------------------编程问答-------------------- 多线程的使用只是为了同一时间干更多的事情,CPU使用率高,只能说明你线程内的逻辑可能臃肿消耗长时间来使用CPU运算,又或者是你本来就需要耗这么多的运算时间来完成~ 建议你从精简线程内部逻辑方面入手~ 1楼的打比方很有趣,也很对! 哈哈! --------------------编程问答-------------------- 你不要让线程一直狂跑,使劲的循环,可以延迟1S,或者几百毫秒 --------------------编程问答-------------------- 线程只是在后台跑,不影响主线程UI的响应
该用多少资源还是得用的。
建议在线程循环中增加Sleep(),减慢它的运行。 --------------------编程问答-------------------- 你的程序在哪里停顿 在哪里占用资源高 你自己不知道啊 --------------------编程问答--------------------
引用 9 楼 lfqsy 的回复:
你不要让线程一直狂跑,使劲的循环,可以延迟1S,或者几百毫秒

看你的循环是什么样的
如果循环执行率比较高
这个方法不错
其实如果你要达到降低Cpu的效果 这个方法不错
楼主可以使用
但是同时程序的效率会降低 --------------------编程问答-------------------- 是不是有循环在空转。适当的sleep啊。 --------------------编程问答-------------------- 先要试试你的程序在一个线程下的表现,这是最根本的。
别一个线程都没调通就上多线程。 --------------------编程问答-------------------- 我以前做了个程序,别的程序向文件里面填东西,我这个程序就用线程一直检测有改动就读取里面的文件,没有SLEEP()就CPU占用很高 --------------------编程问答-------------------- 只听说内存占用大的,没听过cpu占用大的,你确定不是笔误?现在硬件中cpu超前太多了,除非你搞了写死循环在那里浮点运算,不然不可能吧。 --------------------编程问答-------------------- 内存占用高倒是可能,现在都是object在搞 --------------------编程问答--------------------
引用 16 楼 h733y 的回复:
只听说内存占用大的,没听过cpu占用大的,你确定不是笔误?现在硬件中cpu超前太多了,除非你搞了写死循环在那里浮点运算,不然不可能吧。

呵呵~~ --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 上点代码啊,不然怎么知道 --------------------编程问答-------------------- vs菜单栏“分析”->启动性能分析,剩下的自己研究下

这个工具可以跟踪到每个方法占用的时间,帮你找到最可疑的代码段 --------------------编程问答-------------------- 估计用了httpwebrequest,你可以试试异步方法,beginrequest

或者控制同时并发request的线程数量 --------------------编程问答-------------------- 使用线程池,限制线程的数量,队列运行... --------------------编程问答-------------------- 难道楼主将 while(1) 从一个线程中分发到多个线程中并行?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,