在程序中,不断地call一个程序,有什么办法提高速度?

发布于 2022-09-02 05:06:20 字数 130 浏览 12 评论 6

在看注意事项的时候,有提到:
在do-loop中要避免任何的call,可是有时call是必要的,比如客户需要修改日期时:
这样在循环中要不断地call这个程序来修改日期;
方法上有说将它写进datapool,这个是什么意思?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

铃予 2022-09-10 15:55:17

明白了,谢谢,

來不及說愛妳 2022-09-10 15:08:40

本帖最后由 franliu 于 2010-07-23 23:18 编辑

回复 1# first_come

如果你可以修改被call的程序,那么可以将那个程序写成有两种退出方式。一种是让*inlr 保持 *off 的状态,用return退出,另一种是将 *inlr设成 *on 再退出。

怎样退出可以由传入的参数控制。

在最后一次调用的时候,选择让  *inlr = *on 再退出。

这样程序就可以长驻在内存中,文件保持打开状态,变量不被系统自动初始化。运行就快得多了。

澉约 2022-09-10 13:57:21

谢谢passthru!!!我去IBM的iseries infocenter去找找看有没有相关资料,总之学习了。。。

芸娘子的小脾气 2022-09-10 12:16:29

好高深,看不明白,惭愧....等我多看几遍,里面有些概念不明...呵呵,谢谢

愛放△進行李 2022-09-08 13:39:01

本帖最后由 passthru 于 2010-07-22 11:24 编辑

楼主的题很有代表性,往往是做400开发非常缺乏的深究学习,甚至包括一些资历非常深的开发人员和总体和概要设计人员。

不是在loop中就不能用call。

首先,要掌握400环境下的call有几种方法,这些call之间的公共和差异。还有熟悉call的运行机制。再进一步深化,就是0S400的支持。

call的方式有1)动态的call;2)callb,pgm内modules的静态调用;3)callp不同pgm之间静态moudles的调用。从字面上就知道,静态调用,速度比动态调用快,因为静态调用在编译pgm时,os400就通过db2400把调用关系prototype,原型接口,记录下来,modules之间的关系也通过指针的形式在os400用户信息表中进行登记。在静态调用时,调用路径已经存在os400表中。然而,动态调用,调用关系如果没有在pgm中直接定义,os400就会自动到libl中查找排序在第一个位置的obj(*pgm),就是说,os400会消耗系统资源进行临时路径查找。

无论调用关系式call、callb、或callp,在第一次进入pgm时,os400都会初始化H表中的系统支持定义、D表中的变量,都会把pgm的目标代码通过pool装入到内存中。如果在pgm结束,没有设置*inlr为*on,即释放pgm上述的系统资源,而仅仅用return,这时,这个pgm在下次重新进入时,OS400会自动保留上次pmg的运行环境,即H和D表的定义,而不必重新装载这些定义;保留ODP的路径和状态。这时,重新进入,只需reset D表中的变量;从新设置表中的指针。

对上述说法,可能会进一步提问,那么程序代码呢?是否还存在pool中,或者内存中?
如果在编写pgm代码时,用到AG,或者通过系统命令把pgm装载到内存中,这时pgm就一直保留在内存中,程序代码无需通过硬盘-pool-内存,反复进入,而仅仅是物理内存上的电子开发操作,这时,PGM在os下保持最高速度的响应和运行。

如果还要进一步提高pgm的运行效率,通过procedures的modules的并发,即多线程处理,除了pgm的编写技能和模式,还需OS400的设置和支持。这又是另外一个话题了。

挽容 2022-09-04 00:24:48

call一次就进入memory了,是不是qingzhou他们说的那个setobjacc?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文