当我们多线程运行时,一般都是循环的处理很多条数.据,
有时候我们想知道运行的大约速度。
最简单的办法就是:完成总数量/花费时间=速度
窗口程序集名 | 保 留 | 保 留 | 备 注 | 速度统计类_不合理 | | | | 变量名 | 类 型 | 数组 | 备 注 | cx_计数 | 整数型 | | cx_启动时间 | 整数型 | |
cx_计数 = 0 cx_启动时间 = 取启动时间 ()sn_InterlockedIncrement (cx_计数 )返回 (cx_计数 × 60 × 60 × 1000 ÷ (取启动时间 () - cx_启动时间 ))
但是这个方法有个问题,比如在执行post或get之类的操作,
假设前面半个小时,服务器响应很快,速度统计是正常的,假设速度为10W每小时
后面突然服务器没有响应了,这种统计不能体现出这种变化,后面半个小时,都是完全停止状态,速度最终会显示为5W每小时。
——————————
后面意识到,要体现出这种突然的速度变化,应该采样尽可能短时间内的数量(像利息用7日年化那种算法一样)
可以假设采样10秒内的数量,来计算时速
这样,要把,每个任务,完成的时间都记录下来
窗口程序集名 | 保 留 | 保 留 | 备 注 | 速度统计类_旧 | | | | 变量名 | 类 型 | 数组 | 备 注 | cx_许可证 | 整数型 | | cx_记录 | 整数型 | 0 |
cx_许可证 = 创建进入许可证 ()删除进入许可证 (cx_许可证 )进入许可区 (cx_许可证 )加入成员 (cx_记录, 取启动时间 ()) 退出许可区 (cx_许可证 )变量名 | 类 型 | 静态 | 数组 | 备 注 | jb_t | 整数型 | | | jb_计次 | 整数型 | | | jb_数量 | 整数型 | | |
jb_t = 取启动时间 ()进入许可区 (cx_许可证 )计次循环首 (取数组成员数 (cx_记录 ), jb_计次 )如果 (jb_t - cx_记录 [jb_计次 ] > 10000 )jb_数量 = jb_数量 + 1 跳出循环 ()计次循环尾 ()如果真 (jb_数量 > 0 )删除成员 (cx_记录, 1, jb_数量 )jb_数量 = 取数组成员数 (cx_记录)退出许可区 (cx_许可证 )返回 (jb_数量 × 6 × 60 )
这个也有一个问题,完成一个任务,都要在数组里面添加一个成员,效率低。
如果任务速度很快,数组就会很大,虽然会自动删除掉10秒前的记录
但是数组频繁增删,本来就很低效率。
——————————
后面弄了一个很完美的算法,
执行完一个任务后,用于统计信息的的代码,就一行:
InterlockedIncrement (cx_计数)
相当于cx_计数=cx_计数+1,但是多线程,使用了原子递增函数,防止漏掉
下载:
速度统计类.e
(13.1 KB, 下载次数: 62)
|