• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

如何在RPG程序使用BLOCK关键词提高读写文件速度

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 47次 | 进入软件测试论坛讨论

领测软件测试网 RPG编程通常要与物理文件、逻辑文件等各类文件打交道。在RPG的F定义行里有一BLOCK关键词,善加使用这一关键词可以大幅度提高文件的读写速度。这在对具有大量数据的文件进行批处理时,效果特别明显。使用方法如下:

1.定义RPG程序F行(文件描述规范):

文件描述规范里有一BLOCK(*YES|*NO)关键词。它控制着文件的块读写方式。该关键词只对DISK或SEQ类型的文件有效。我们常见的物理文件(PF)或逻辑文件(LF)就是DISK文件。

在缺省情况下,即F行关键词位置没有定义BLOCK时,在编译RPG程序时,对于输入记录,BLOCK缺省值为*NO,即文件不会以块的方式读入;对于输出记录,BLOCK缺省直为*YES。但上面编译缺省值需要先符合下面条件:

(1) 文件是程序描述文件(program-described)。
(2) 文件如果是外部描述文件(externally-described),则文件应只有一个记录格式(Record Format)。
(3) 在文件规范描述里(F行),不能使用RECNO关键词。

如果要使文件输入记录以块方式(BLOCK)读入,则F行必须指定BLOCK关键词,并赋值为*YES, 比如,下面定义了一外部描述的DISK类型的文件,其读入方式采用BLOCK方式:

FJRNRBUFP IF   E         DISK   BLOCK(*YES)  


2.使用CL程序调用,并用OVRDBF覆盖文件属性:

光是在RPG的文件描述里定义BLOCK(*YES),并不能使程序按BLOCK方式工作。需要先使用OVRDBF命令改变一下文件的属性。OVRDBF是个不错的命令,它不仅可以在程序内部改变文件名称,还可以在不改变文件名称的情况下,改变文件的一些属性参数,或者同时改变文件名称及文件属性参数。要使BLOCK方式正常工作,就需要先用OVRDBF命令改变文件的属性。要使BLOCK正常工作,需要指定SEQONLY(*YES)属性,即文件是按顺序读,RPG程序中不能有随机读写函数,比如READE等。SEQONLY(*YES)允许把多个记录放进内部数据管理缓冲区(Internal data management buffer),然后在一个时间点一次性把这些记录传给RPG程序。

在指定文件为SEQONLY(*YES)属性的同时,还应指定一次读取到内部缓冲区最大记录数,该记录数与缓冲区和记录的大小有关,缓冲区越大,记录长度越小,能够一次读取的最大记录数越多。系统缺省最大记录数为4,实际工作中可以通过反复测试来验证系统能够一次读取的最大记录数,当设定的最大记录数*记录长度>内部缓冲区后,程序会报一错误。OVRDBF修改文件属性示范例子如下:

OVRDBF   FILE(JRNRBUFP) SEQONLY(*YES 34)

上面语句规定了RPG程序可以对JRNRBUFP文件进行顺序BLOCK读写,一次可以读取34条记录进内部缓冲区。

注意事项:
(1) 要使用BLOCK方式,必须先用CL命令OVRDBF定义文件属性,然后调用RPG程序,不可以在RPG程序内部调用OVRDBF 。
(2) 使用BLOCK方式,要求文件为顺序读写方式,所以RPG程序中不能使用READE等随机读写函数。
(3) 通常对大文件进行批处理时,文件都是顺序读写的,这时候使用BLOCK方式,效果特别明显,实际经验发现速度可以提高5-10倍。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网