我做的是个数据采集系统,程序连接上设备后就开始不停地采集数据。我让程序一直采集数据,大概运行了20多分钟,计算机反应就一点点变慢了,直至跳出来一个Runtime Error的对话框。关掉程序后,我查看了一下任务管理器,发现CPU占用了50%还多,大概要过半分钟,CPU使用率才降到3%,我觉得可能是程序内存使用出了问题。我程序中使用的堆比较多,也用了链表,但是链表中并没有存留太多的东西啊,因为,改变源信号,数据都能及时响应。那会是在哪里出了问题呢?恳请高人指点一下,谢谢

解决方案 »

  1.   

    我让程序一直采集数据,大概运行了20多分钟,计算机反应就一点点变慢了,直至跳出来一个Runtime Error的对话框。关掉程序后,我查看了一下任务管理器,发现CPU占用了50%还多,大概要过半分钟,CPU使用率才降到3%,我觉得可能是程序内存使用出了问题。
    楼主说明一下情况
    1、是程序完全退出后,CPU还在占着50%吗?如果是这样的话那不关你的程序事!
    2、强制关闭程序,程序在退出的过程中CPU占50%吗?那就是设备通讯问题,估计在你关闭程序的时候,系统不断发送关闭命令给你的程序,而你的程序中有一条线程正在与设备进行通讯而无法立刻关闭(因为是强制关闭,所以设备没有接收到正常的连接中断消息)
    没研究过数据采集系统,根据数据库连接的道理推断!
    当服务器的数据库服务程序没有开启或者地址不存在有数据库服务的时候,客户端连接数据库的时候会一直占着线程,直到超时后才有反应。
      

  2.   


    我说的关掉程序是指弹出“Runtime erroe"对话框之后,程序也就没法继续运行了,之后程序就关闭了,这个时候去查看任务管理器。说明一下,虽然我做的是数据采集系统,但是并没有用数据库,我只是把数据保存到了txt文件里面
      

  3.   

    仔细调试了一下我的程序,发现在程序运行过程中,任务管理器重的CPU使用率一直在50%左右(是不是太高了?),运行过程中,线程和进程也基本上不变化,但是PF使用率(虚拟内存的使用情况却是一直升高的,最后快满格的时候,差不多有1.95G,CPU使用率也达到100%了,程序就崩溃了)。然后程序关闭后,CPU使用率迅速降到10%以内,过了大概半分多钟,PF使用率直接降到383M。不知道高人们遇没遇到过这样的事情,还请多多指点一下
      

  4.   

    一般情况下CPU高和内存没有直接关系,而是你要么不正确的大量循环或者负载过重。内存增加和CPU没有直接关系,除非你的代码需要对大量数据进行处理,因此内存增加意味着处理量增加。
      

  5.   

    我写的程序曾经遇见过类似的现象,后来就注意两点,第一是GDI资源,第二是不用timer。
      

  6.   

    猜测的:采集数据时不断地 new 出新的内存块,而这个数据一直保存有内存中?我之前做过试验,在内存中建一棵二叉树,new 1,000,000,000 个节点时出现过你这种类似的现象( CD2.0+512MB XP SP2)。如果是这种情况,LZ可以考虑一下把采集到的数据保存当文件中,或用一块共享的内存缓存记录当前采集的数据,当缓存满后写入文件中,再清空循环利用,使用数据时直接从文件中读取。