[PU9功能解说] 如何确定代码是否运行表现不佳(速度慢)?
也许用户已经确定了某个操作他们认为速度缓慢或者运行表现可以更好一点。又也许你正在编写一个自定义程序,并想知道在时间花费在哪了,以便更好地调整修改。
若想着手开始,首先要做的事情之一就是定时追踪。定时追踪功能可以告诉你某段代码调用了多少次,以及这段代码花费了多少时间。
有几种方法可以激活/取消激活/读取定时追踪日志。关联背景很重要,因为功能并不完全相同。
方法1:测定一项用户操作的时间
例如,你发现在录入一张销售订单时,从产品列往后移动时非常缓慢。
1. 前往你发现这个速度缓慢的那个地方。在本示例中,即前往[产品]列,且不要按tab键向后移动。
2. 在右侧菜单中,展开帮助→诊断→。
3. 选择定时激活。
4. 将日志文件的位置记录下来,根据需要更改文件的路径和文件名称。请注意:如有必要,技术支持人员可能会要求提供这个文件。
5. 点击OK按钮
6. 完成你的用户任务
7. 自右侧菜单,选择定时读取
8. 你会看到一个日志
结果:在本示例中,我们可以看到ZSLEEP从SPESOH程序中被调用一次,在花费的总时长3049ms中占用了3001ms(即98.42%),我们可以有理由认为问题就出在这段代码。
重要提示:如果用户没有看到选项中有“定时激活”,这很可能是因为他们没有获取安全访问的权限。该用户(参数设置→用户→用户)需要在[参数]页签上将SUP(超级用户)项目下DEV(开发)组中的DBG(授权编译)的值设为“是”。
方法2:在4GL经典代码范围内测定时间
这在测试你的特定代码、较大程序的子集或者在批处理服务器中测试时很实用。
• 如果你想要测试自己的代码,可以在源代码中插入以下语句:
# Activate the timing trace
Call ACTIVE From TIMING
# Your code
...
#Stop and read the timing trace
Call ARRET from TIMING
• 如果你的代码需要在批次服务器上执行,或者需要通过一项web service执行的话:
# The following statement start the timing trace and log in an intermediate file generated in the runtime tmp directory
# The name of the file is the name of the user used to execute the program
# The second parameter of the function (2) indicates the log of the gosub, replace with 1 if you don't want gosub
Call ACTIVE_MAN(filpath("!tmp",GUSER,"tra","","",""),2) From TIMING
# Your code
...
#Stop the timing trace
#The runtime stop to trace and close the file located in the runtime tmp directory
Call ARRET_MAN From TIMING
This method does not automatically display a log. If you want to analyze the file generated you can use this code :
Call LECTURE(filpath("!tmp",GUSER,"tra","","",""),2) From TIMING
注意:请记得使用相同的用户(或者指定正确的用户,而不是GUSER)。
结果:我们会生成一个类似于第一种方法中显示的日志文件。
方法3:借助V7风格的代码测定时间(在线帮助主题:“代码性能分析”)
启动性能分析进程
这是通过使用函数ASYRTIMING.START执行的。这个函数包括两个参数:
• 一个字符串的字符值,这个值定义了不含扩展名和路径的临时文件名,其中写入了调用和时间戳。如果给定的是一个空值,则将使用以下方法生成该名称:
• 获取小写的用户代码。
• 使用adxuid(1)获取一个与进程关联的唯一ID。
• 在当前Sage X3解决方案的“tmp”子目录中构建一个路径,并创建一个文件,该文件名称的前两段用下划线分隔,并加上扩展名“.tra”。
• 默认情况下,附加整数是设为'0'的。如果需要分析通过Gosub调用的代码,则其值会被修改为'1'。
结束性能分析进程
这是通过使用函数ASYRTIMING.STOP执行的。有四个参数必须填写:
• 当前关联背景的一个指示器。
• 那个写入调用和时间戳的临时文件名。如果未提供文件名,那么将使用相同的算法来生成文件名。
• 同样的整数值,以便了解是否必须分析Gosub。
• 一个会返回所产生的明细日志文件的字符串变量。
示例:
如上所述,如果没有录入路径,那么文件就会生成在runtime的tmp目录中。你会需要使用前面提到的相同方法来分析数据。
结果:
分析Sage X3的脚本代码对于获取最佳性能非常重要。这样可以找出耗时程序的确切位置,并衡量某些代码段被调用的频率。 |