数组上界太大导致cpu利用率太高,如何解决(5分)

  • 主题发起人 主题发起人 willyu
  • 开始时间 开始时间
W

willyu

Unregistered / Unconfirmed
GUEST, unregistred user!
编了个小程序
for i :=1 to 10 do
for j :=1 to 24 do
for k :=1 to 3000 do
a[j][k] :=random(99)/100;
这样的小程序一运行系统cpu利用率就100%,如何解决这个问题,是不是数组设定的太大了
但我的需求比这个还要大,主要监视24行10列的传感器产生的数据,传感器每秒产生3个数据,要记录1000秒的数据,这些数据最后要通过曲线描述出来,因此用数组,但现在看来我的方法不合理
还有什么更合理的方法吗,望各位大侠执教
先谢了
也可以另外交流:giantyu@hotmail.com
 
这样的代码,计算机也是比较快就执行完了.

用浮点数是比整型慢点.


如果只是短暂的 100% 那是正常的.如果一直都是 100% 那是你的程序有问题了.
 
分太少。
1 不能直接声明内存占用过大的数组,cpu会为计算分配你的内存而耗费大量时间。
可分2块声明,1个为a,存放传感器,一个为b[i,j]存放传感器数据
如果数据更大,请用allocmem分配内存
2 不能用这么多循环,数据结构设计好了就可以有效避免烦乱的运算。
3 尝试用多线程来建立监视,每个线程监视某一个范围内的传感器。
4 不要用过多的浮点运算,最好能转换为整形运算,浮点运算是非常耗费cpu的。
 
每秒 3 个数据,数据量也不算大.

我做过声卡数据与串口数据同时采集的.声卡 11025Hz 串口 100Hz
同时采集,实时画出波形.
在 C2.4 256M 的机上,CPU 使用率大约也只有 50% - 60% 左右.

我没用数组,因为我不知道要采集多长时间.又不想做链表,麻烦
我直接用 TMemoryStream 来完成的

如果你能确定采集多长时间,那就用数组了,数组比较快.可以直接处理浮点数据.
 
问题解决了,为了能放最新的数据,我移动了数组里的数据,显然是不可行的,只能用环来解决问题
以后还要向QSmile多多请教采样的问题
 
我对你如果处理“环”到是很感兴趣。
 

Similar threads

S
回复
0
查看
855
SUNSTONE的Delphi笔记
S
S
回复
0
查看
783
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
922
SUNSTONE的Delphi笔记
S
后退
顶部