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

有没有更快速的方法计算?
环境:VS2008 .net2.0 Winform
问题:项目中需要从下位机读取测试的数据,然后计算并绘图。结构如下:

int _count = 50 * 1024; //数据量,根据测试时间长短,可以为50K/500K/5M/50M
ushort[] _Q = new ushort[_count];  //放电量,
int[] _times = new int[_count];//放电时间,表示的是本次放电和上一次放电的时间差值,单位5us。差值可能为1~200M(5us~1000s)之间

现在需要绘制Qmax-dt、Qavr-dt、N-dt图,即统计所有相同时间差的点。比如时间差为10s的点有100个,即计算这100个放电值的最大值、平均值、放电次数.
我现在的做法是把时间差分为1000组,每秒一组,然后分别计算。需要时间约1.3s。但这明显太慢了。不知道大家有没有更好更快的方法。能够把计算时间控制在300ms内。

------解决方案--------------------
太厉害了...
------解决方案--------------------
如果画图不那么精确也可以的话,可以采样一些数据后绘制
------解决方案--------------------
开多线程计算如何?
------解决方案--------------------
多线程计算应该可行的
------解决方案--------------------
4核cpu可以提高4倍速度。
------解决方案--------------------
采用并行计算。开两个Task,一个收集数据,一个绘制图片,同时要记得使用线程安全的类型来存数据,如ConcurrentQueue。不过,需要在双核以上的机器运行才能发挥并行的优势。
------解决方案--------------------
太厉害了!。。。
------解决方案--------------------
只有优化你的算法了。
------解决方案--------------------
把你整个计算代码写出来吧,感觉不应该那么慢!是不是循环的地方没写好,反复处理的次数多了
------解决方案--------------------
引用:
Quote: 引用:

开多线程计算如何?


多线程速度是快了不少,但数据量在5M以上的时候,还是要1s多

引用:
4核cpu可以提高4倍速度。


程序是安装在别人电脑上,咋个知道几核的

引用:
采用并行计算。开两个Task,一个收集数据,一个绘制图片,同时要记得使用线程安全的类型来存数据,如ConcurrentQueue。不过,需要在双核以上的机器运行才能发挥并行的优势。


画图速度是快的,因为计算好后就只是一条线了。主要是计算耗时。


直接看电脑配置。
如果是计算耗时,那就需要优化计算了,还可以考虑将计算部分并行化。这样单位时间内就可以计算更多。
------解决方案--------------------
用内存换效率,使用大容量的数组来存储数据,不分组。

            int _count = 50 * 1024; //数据量,根据测试时间长短,可以为50K/500K/5M/50M
            ushort[] _Q = new ushort[_count];  //放电量,
            int[] _times = new int[_count];//放电时间,表示的是本次放电和上一次放电的时间差值,单位5us。差值可能为1~200M(5us~1000s)之间

            int[] maxValue = new int[200000000];
            long[] sumValue = new long[200000000];
         &nb