问题描述
DataViewdv=db.ExecuteDataView(sql);for(inti=0;i<dv.Table.Rows.Count;i++){//得到数据后进行处理。}
dv数据量很小不超过100条。得到数据进行处理时间大概3到5秒。我要在1秒内把dv轮询一次,要求实时进行计算有什么好办法吗?
解决方案
解决方案二:
得到数据进行处理--这个处理过程做成异步处理,不要阻塞循环
解决方案三:
“得到数据”为什么要用5秒钟,而不是15毫秒?5秒钟才能得到数据,你要1秒钟轮询一次,而且还要“实时计算”,就算你的电脑非常“闲”你想把闲置的电脑利用起来,这个想法也是自相矛盾的啊!
解决方案四:
基本上,你的这个说法中处处是坑、处处是误用对象。所以还是应该仔细规划。
解决方案五:
后台处理有线程去做,完成轮询dv自然快到不行
解决方案六:
这个只能并行异步。因为你的计算过程本身就要5秒。
解决方案七:
伪代码:不断收到超时警报。咋办?publicdelegatevoidAddHandler(xxx);DataViewdv=db.ExecuteDataView(sql);for(inti=0;i<dv.Table.Rows.Count;i++){newAddHandler(activeTriggerTjd).BeginInvoke(xxxx,null,null);//Thread.Sleep(10);}doublett=(DateTime.Now-date1).TotalMilliseconds;//Console.WriteLine(tt);if(tt>3000){UMailSSL.send("计算超时","",tt.ToString()+"ms");}
解决方案八:
new AddHandler这里已经是异步了,如果每循环一次就放一个线程里面就内存溢出了
解决方案九:
引用7楼shsyzl007的回复:
new AddHandler这里已经是异步了,如果每循环一次就放一个线程里面就内存溢出了
这只是个委托,和异步处理没啥关系吧,给你个线程池的例子,照着改写就行了,http://www.cnblogs.com/SkySoot/archive/2012/04/01/2429259.html当然,如果你代码里封装了异步工作类,也可以不用上面的
解决方案十:
时间不是可以无条件缩短的,具体情况具体分析.车子再快也开不了1000码,那是飞机
解决方案十一:
引用9楼tcmakebest的回复:
时间不是可以无条件缩短的,具体情况具体分析.车子再快也开不了1000码,那是飞机
目前CPU利用率大概20%左右,还有提升空间。问题是程序怎么设计比较好
解决方案十二:
把对象放循环体外面,你这样不停的新建对象,不超时才怪