日期:2014-05-17  浏览次数:21065 次

C#制作的Form程序的内存和CPU使用率问题
先说CPU使用率,
运行程序过程中,CPU使用率一直在50%左右,何解?
如何能降低?是程序编写过程中出了什么问题么?

内存问题:
在运行某一个功能时,由于从数据库中读取大量数据。
内存使用达1个G之多,待功能执行完毕。内存还是1个G的使用量
但是最小化后,恢复正常的3000多K 
这是什么原因呢?

望高手指点。

------解决方案--------------------
看高效编程c#就可以了。没有绝对,只有相对。
------解决方案--------------------
另外,最小化,你最小化任何一个程序内存都会被强制释放,这是操作系统干的,你不信最小化你现在浏览网页的浏览器试试。即便你开了n多的网页,最小化后,傲游只占3M内存。
------解决方案--------------------
这个就很难笼统的回答了
其实你可以内存检测软件检测一下

或者,打开资源管理器,单步运行程序,看看具体是哪个位置的程序导致内存暴增的


------解决方案--------------------
适当的进程休眠可以聊低CPU使用率,如System.Threading.Thread.Sleep(100);
内存占用太多:
1可能是数据量太大的问题,可以考虑实时获取小部分,不要一下子全部加载到内存
2查看代码是否有大对象未释放
------解决方案--------------------
执行完之后调用GGC强制回收一下
------解决方案--------------------
运行程序过程中,CPU使用率一直在50%左右,何解?

还是你程序不够优化
检查一下你的程序,比如循环,业务逻辑,存储过程,尽量少调用数据库等。
------解决方案--------------------
即便你开了n多的网页,最小化后,傲游只占3M内存。

纯扯,你看看虚拟内存,我的傲游就没有只占3M内存的时候,多是几十M

现在的QQ也够流氓的,经常是200M内存(内存+虚拟内存),真搞不懂他一个企鹅要这么多内存干吗

msn也是大内存东西。

机器内存还是太小,2G不够他们分的
------解决方案--------------------
看cpu占用率,估计你是个双核机器,实际上你的程序cpu占用率100%,肯定有问题,估计哪个地方死循环了。
------解决方案--------------------
.net内存回收并不是真的不用管了,我一个程序,从代码上看怎么也不应该有问题,但是内存却只升不降,如果定期gc一下,确实能砍掉9/10的内存,但是cpu占用率就上去了
对了你是不是反复的打开关闭新的sqlconnection啊,如果这样,我发现内存就只升不降。
------解决方案--------------------
优化代码
强制回收资源
少new
------解决方案--------------------
楼主这样提问是不对的,你的什么程序,执行什么功能的时候系统消耗大最好说清楚。
我经常使用C#写的winform读写oracle,那个库很大,是T级别的。c#的ado.net和delphi的bde不一样,查询的时候必须返回全部的数据下载到内存,而不像delphi可以分包下载,如果查询设置不当返回数据极大时(例如10万条记录)那肯定会占用cpu和内存。
但是这个也是没有办法的,除非你使用datareader来访问,自己组装数据到datatable里面去,实现数据分包。