首页新闻找找看学习计划

c# CPU占用太高,可以从哪些方面优化?

0
悬赏园豆:50 [已解决问题] 解决于 2013-08-02 10:28

写了一个需要长时间运行网络数据采集的程序,代码太多,贴出来怕不行。优化了一周终于把成级数据上涨的内存问题解决了,但现在CPU占用非常高,很容易就100%,希望各位支招?

 

程序中已使用Sleep,App.DoEvents 等对长时间的循环进行了优化,但内存占用仍然很高。

沧海一杰的主页 沧海一杰 | 初学一级 | 园豆:48
提问于:2013-07-28 13:12
< >
分享
最佳答案
1

如果是很容易就出来100%,那就很简单了。

注释部分代码,观察。

再注释部分代码,观察。

再注释部分代码,观察。

很快就能找到引发CPU占用高的代码,然后针对性处理。

收获园豆:15
路过秋天 | 老鸟四级 |园豆:4746 | 2013-07-28 13:30

我主要采取了这种方法,效果还可以

沧海一杰 | 园豆:48 (初学一级) | 2013-08-02 10:20
其他回答(13)
0

异步IO

 

另,Sleep没意义

收获园豆:5
alby | 园豆:321 (菜鸟二级) | 2013-07-28 13:55

Sleep如果没意义微软主要用这个函数是做什么的?

支持(0) 反对(0) 沧海一杰 | 园豆:48 (初学一级) | 2013-07-28 14:48
0

建议优化一下正则表达式的处理代码

dudu | 园豆:39099 (高人七级) | 2013-07-28 14:07

基本上没用到正则,抓取规则是动态根据用户的鼠标点击生成的

支持(0) 反对(0) 沧海一杰 | 园豆:48 (初学一级) | 2013-08-02 10:22
0

没有的该删的就删除

自己在优化 | 园豆:202 (菜鸟二级) | 2013-07-28 15:23
0

针对性的处理,很难说是那个导致的。

````` | 园豆:14268 (专家六级) | 2013-07-28 16:12
0

找了三篇帖子,你看一下大家的讨论吧

http://bbs.csdn.net/topics/90356810

http://bbs.csdn.net/topics/390291787?page=1#post-393027855

http://bbs.csdn.net/topics/350030920

收获园豆:5
@@@一统@@@ | 园豆:1551 (小虾三级) | 2013-07-28 16:29
0

cpu只有在计算密集型时才会很高,看看你的的采集算法怎么弄的,优化算法。

收获园豆:5
arg | 园豆:1047 (小虾三级) | 2013-07-28 18:21
0

用测试工具检测问题在哪里.net平台可以用NCovery查看运行时间内代码每行代码执行次数和覆盖情况。

还有就是DotTrance工具,可以在程序运行时跟踪C每个线程每个函数的CPU占用率和内存占用率来检测。

我做工控软件的,一般出现内存和CPU高消耗问题公司都是用这些类似的工具检测的。这些工具网上都有。检测出消耗高的代码块再进行优化,一般使用率高就是计算复杂或通信没有等待出现高速循环等等

收获园豆:5
大芝麻 | 园豆:4 (初学一级) | 2013-07-28 19:18
0

扯淡上边的

SOUTHER | 园豆:825 (小虾三级) | 2013-07-28 21:50
0

没找出耗CPU的代码块,什么都是徒劳

Yu | 园豆:12944 (专家六级) | 2013-07-28 22:07
0

VS自带的性能采样和分析可以看看哪个是瓶颈

收获园豆:10
2012 | 园豆:18932 (专家六级) | 2013-07-29 08:39

从网上看了下,这个应该很有用,但悲剧的是我装的是专业版,暂时不用这个了。

支持(0) 反对(0) 沧海一杰 | 园豆:48 (初学一级) | 2013-08-02 10:23
0

路过学习

panjk | 园豆:712 (小虾三级) | 2013-07-29 15:26
1

1.死循环?

2.webbrowser天生内存泄露.

3.弱引用导致的泄露(事件....)

4.io操作没有Close

收获园豆:5
【秦时明月】 | 园豆:760 (小虾三级) | 2013-07-31 14:49

整个程序就是一个类死循环,直到条件为假才退出,一般运行几个天到几个月一个任务。

webbrowser天生内存泄露.有这个可能吧

没有用到弱类型,io操作也不会有没有close的。

支持(0) 反对(0) 沧海一杰 | 园豆:48 (初学一级) | 2013-08-02 10:25
0

我也在做差不太同样的事情:需要不断读取数据 然后发送。程序一直在循环,就是按照最佳答案做的,注释一下 运行程序 观察;再注释 再观察。很实在的方法。

dancingwolves | 园豆:204 (菜鸟二级) | 2013-10-28 00:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册