Ibm midrange 在调试模式下使用F10单步执行时,初始化大记录大约需要20分钟

Ibm midrange 在调试模式下使用F10单步执行时,初始化大记录大约需要20分钟,ibm-midrange,cobol,Ibm Midrange,Cobol,我修改了一个旧的cobol程序,在用debug测试它时遇到了一些奇怪的行为/特性。有一个相当大的记录结构和一个初始化 在调试过程中,如果我使用f10单步执行初始化行,则完成该步骤大约需要20分钟。然而,如果我在它前后放置一个断点,并用f12在其上继续,它将在几分之一秒内完成。 注意:此代码已在程序中 这是一个bug还是一个我应该知道的特性 01 TABLE. 03 RECORD OCCURS 999

我修改了一个旧的cobol程序,在用debug测试它时遇到了一些奇怪的行为/特性。有一个相当大的记录结构和一个初始化

在调试过程中,如果我使用f10单步执行初始化行,则完成该步骤大约需要20分钟。然而,如果我在它前后放置一个断点,并用f12在其上继续,它将在几分之一秒内完成。 注意:此代码已在程序中

这是一个bug还是一个我应该知道的特性

01  TABLE.                          
    03 RECORD                   OCCURS 999. 
       05 LINE                  OCCURS 150. 
          07 FIELD              PIC X(03).


INITIALIZE                  TABLE.

使用重定义“表1重定义表pic x(149850)”。初始化表1。更有效。调试器正在强调效率低下。在初始化“字段”的同时执行150000次操作。运行时程序也可能需要长时间执行。根据我的经验,这可能表明,随着从小到大重复次数的增加,执行时间呈指数级增长。如果将“发生次数”加倍,则最有可能看到以小时为单位的exec时间。类似于在数据库上使用搜索键与索引。

使用重定义“表1重定义表PICX(149850)”。初始化表1。更有效。调试器正在强调效率低下。在初始化“字段”的同时执行150000次操作。运行时程序也可能需要长时间执行。根据我的经验,这可能表明,随着从小到大重复次数的增加,执行时间呈指数级增长。如果将“发生次数”加倍,则最有可能看到以小时为单位的exec时间。类似于在数据库上使用搜索键vs索引。

这当然是一个错误,但不知道您使用的是哪个调试器,这很难帮助您。这是ibm i 7.2(STRDBG)上的默认ile调试器,当初始化应用于组项时,它相当于移动到组下的每个基本项。在这种情况下,您将执行相当于“将空间移动到字段(X,Y)”149850次的操作。完成这项任务仍然需要20分钟。正如@SaggingRufus所说,这很可能与调试器有关,而不是与代码本身有关。正如您可能已经注意到的,在大型机上,数百万条这样的指令(将空格移动到字段)通常可以在不到一秒钟的时间内执行。这当然是一个错误,但如果不知道您使用的是哪个调试器,就很难提供帮助。这是ibm i 7.2(STRDBG)上的默认ile调试器当初始化应用于组项时,它相当于移动到组下的每个基本项。在这种情况下,您将执行相当于“将空间移动到字段(X,Y)”149850次的操作。完成这项任务仍然需要20分钟。正如@SaggingRufus所说,这很可能与调试器有关,而不是与代码本身有关。正如您可能已经注意到的,数百万条这样的指令(将空格移动到字段)通常可以在不到一秒钟的时间内在大型机上执行。