Project1

标题: 方法调用时间监测器 1.2 [发布预备] [打印本页]

作者: 静音    时间: 2008-8-4 21:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: 天马座    时间: 2008-8-4 21:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: hide秀    时间: 2008-8-4 21:27
你昨天的那个论坛在线统计呢 一起发到这里来吧 lz研究的都是很另类的东西
对于技术区很多技术饱和的情况下 这些东西在我看来还是眼前一亮
不错 加油{/qiang}
作者: 静音    时间: 2008-8-4 21:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: hide秀    时间: 2008-8-4 22:33
这个东西实用性还有待验证 作为教学也是非常不错的
先鼓励一下 {/qiang}
不说明下估计很少人能看懂
我来简单说明下这个东西吧
追踪函数和追中全局变量之类的 方法
每桢都在监控的 有点影响速度的
功能就是先监控所有的类 也包括模块
一但类方法被调用 立刻执行块(proc)
静音这里的目的是 要输出方法执行了多少时间
所以追踪函数处理调用块里面
给出了2各分歧
一个是判断方法是否为调用了
一旦调用了方法 把一些下方法名 所属类 等信息 记录下来 并且设置当前时间
另一个判断方法是否返回了
也就是执行完毕 或者中途retrun的时候
把当前时间减去之前调用时候的时间 所以就获取了 方法执行的时间
然后把 信息 写入到日志文件
完毕 纯粹文字上的说明
希望大家把它当作教程来学习

PS:最后再补充一下用途
做完游戏之后 会不会感觉啥地方比较卡 或者慢呢
但又不知道原因 用这个看看哪个方法执行时间很长 那就去优化下代码吧




作者: 幻獬豸    时间: 2008-8-4 23:43
提示: 作者被禁止或删除 内容自动屏蔽
作者: 静音    时间: 2008-8-5 11:51
提示: 作者被禁止或删除 内容自动屏蔽
作者: hide秀    时间: 2008-8-6 03:22
很不错 可以进入50%实用阶段了 可以监控默认所有的方法了 战斗在fps30左右 比起昨天的真的进步神速 lz继续加油
作者: 柳之一    时间: 2008-8-6 03:50
哈哈,我的射击游戏正好用这个检测一下。{/cy}
作者: hide秀    时间: 2008-8-6 03:54
哈哈,我的射击游戏正好用这个检测一下

等待完善把 现在除了FPS之外 方法设定别名会报错 感觉lz会在这几天内完善
作者: 灯笼菜刀王    时间: 2008-8-6 03:59
还是看不不懂...哎,想理解都难= =....

顺便问一下
Establishes proc as the handler for tracing, or disables tracing if the parameter is nil. proc takes up to six parameters: an event name, a filename, a line number, an object id, a binding, and the name of a class. proc is invoked whenever an event occurs. Events are: c-call (call a C-language routine), c-return (return from a C-language routine), call (call a Ruby method), class (start a class or module definition), end (finish a class or module definition), line (execute code on a new line), raise (raise an exception), and return (return from a Ruby method). Tracing is disabled within the context of proc.

这一大段东西是什么?不要告诉我是E文章....
作者: hide秀    时间: 2008-8-6 04:19
还是看不不懂...哎,想理解都难= =....

顺便问一下
Establishes proc as the handler for tracing, or disables tracing if the parameter is nil. proc takes up to six parameters: an event name, a filename, a line number, an object id, a binding, and the name of a class. proc is invoked whenever an event occurs. Events are: c-call (call a C-language routine), c-return (return from a C-language routine), call (call a Ruby method), class (start a class or module definition), end (finish a class or module definition), line (execute code on a new line), raise (raise an exception), and return (return from a Ruby method). Tracing is disabled within the context of proc

在详细解释一下把
这是set_trace_func 函数的说明
首先函数作为追踪处理的函数,如果参数设nil的话,则停止追踪
这个和trace_var的用法一样的
块接收6个参数 event,filename,line,object_id,binding,class
方法一旦被调用 就处理块(proc)
事件发生有几种情况,一种是call,一种是return
这两种情况已经说过了 就是调用的时候和返回的时候
还有 class 定义类或者模块的时候
raise 引发异常的时候
c-call和c-return 是调用一个C语言和返回一个C语言
最后一句的意思是 这个函数本身不能使用在块(proc)中

作者: ★_茄孓    时间: 2008-8-6 16:32
{/qiang}一句话good```
我的游戏速度剩下10了。
昨天检测下恢复到20了哈!!~
继续加油!
作者: 柳之一    时间: 2008-8-6 21:14
t0 = Time.now
tms0 = Process.times
99999.times{File.read("Data/Script.rxdata")}
t1 = Time.now
tms1 = Process.times

p [t1-t0,tms1.utime - tms0.utime,tms1.stime - tms0.stime]

http://www.kuqin.com/rubycndocument/man/built-in-class/module_process.html
作者: 静音    时间: 2008-8-7 08:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: hide秀    时间: 2008-8-7 16:44
时钟时间:就是一个进程从开始运行到结束运行后,你的时钟走过了多少时间,这其中包含了进程在阻塞和等待状态的时间。
用户CPU时间:就是用户的进程获得了CPU资源以后,在用户态执行的时间。
系统CPU时间:用户进程获得了CPU资源以后,在内核态的执行时间。

进程的三种状态为阻塞、就绪、运行。

时钟时间 = 阻塞时间 + 就绪时间 + 运行时间
用户CPU时间 = 运行状态下的用户空间时间
系统CPU时间 = 运行状态下系统空间的时间。

Time.now 得到的是时钟时间
既 阻塞时间 + 就绪时间 + 用户CPU时间+系统CPU时间

Process.times 保存了进程和子进程的 系统/用户 的CPU时间

utime 只是获取进程的CUP时间 当然要比Time.now少多了

但是从静音分析出来的结果看。。。2种时间怎么差的这么多

作者: 静音    时间: 2008-8-7 16:55
提示: 作者被禁止或删除 内容自动屏蔽
作者: link006007    时间: 2008-8-7 17:37
柳之一 同学给的网站还真是好东西{/se}
我以前都不知道{/ll}




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1