项目要求是定时(500毫秒)察看一个1M左右的文件,如果文件出现变更(文件MD5编码发生变动)则判断为文件更新,这时作以下操作:
1.按固定字长读取数据作为一条数据(2进制流),
2.将该条数据格式化成30组双精度数值
3.与预存值做部分运算,并将新数据保存为暂存值;
4.将30组运算后的值格式化成字符串,以标记字母开头,逗号分割,然后写入暂存区(Memcached)
循环由于记录数过多(1500和2000条上下的2个文件)以及更新频率过高(20次/分钟,间隔不定)在循环时会出现cpu长时间100%占用,有没有什么办法能将CPU占用降下去的方案阿,用Thread.sleep(1)是绝对不可以的,所有操作必须要争取在3秒内完成
1.按固定字长读取数据作为一条数据(2进制流),
2.将该条数据格式化成30组双精度数值
3.与预存值做部分运算,并将新数据保存为暂存值;
4.将30组运算后的值格式化成字符串,以标记字母开头,逗号分割,然后写入暂存区(Memcached)
循环由于记录数过多(1500和2000条上下的2个文件)以及更新频率过高(20次/分钟,间隔不定)在循环时会出现cpu长时间100%占用,有没有什么办法能将CPU占用降下去的方案阿,用Thread.sleep(1)是绝对不可以的,所有操作必须要争取在3秒内完成
解决方案 »
- xtrareports动态报表 获取PageSize时总是获取默认的,无法获取我改后的
- C# 文件传输
- 有没有人用 2008 c#对visio 2007进行过二次开发?急问
- label显示问题
- PostMessage为什么在游戏中摸拟按F1键无效?(重分相谢)
- htm怎么转成word
- 怎样才能做到当窗体改变大小时,窗体内的控件tabpage也跟着改变大小?
- 求助关于datagrid的一个极简单问题
- 那里有最新的vs2005的combobox控件下载,并告诉大概用法
- 在toolbar是的两个按钮之间可以放一个下拉框控件吗?
- C#中向Word中动态插入多个表格并填充数据问题,急在线等
- 鼠标右键获取前控件
另外对你处理数据的方式,建议你采用一带多的方式,一个线程去读文件,把文件分割成1500-2000条,然后把数据放入一个队列里,然后你另外起到10-15个线程同时对这些数据进行处理,得到结果。
难怪cpu总是100%了,一个进程里开到500个线程,呵呵,光系统调度线程就已经占掉机器的cpu了。一个进程开到15-20个线程就是最优的了,你可以进程一起来就开辟15-20个线程做while(true),然后指向一个队列,当队列为空时阻塞住,另外一个线程读取文件,往队列里塞数据,塞进去一个数据,就释放一个线程去处理。这种处理模式的效率是最高的。
一般一个cpu一个进程最合理的线程数是25个,进程本身会占掉5-10个线程左右,所以理想状态是开15-20左右线程就可以了。如果你多cpu,基本上是16-20 * cpu的个数就可以了,开多了反倒没效率。除非你的线程总是会被第三方调用阻塞住,因为这样线程老闲着,没占用cpu,这样你可以算一个最佳的线程数,可以多于这个数。像你的这种情况,基本上开到20个已经不错了。